1 1.1 mrg 2 1.1 mrg /* Copyright (C) 1999-2022 by The D Language Foundation, All Rights Reserved 3 1.1 mrg * written by Walter Bright 4 1.1 mrg * https://www.digitalmars.com 5 1.1 mrg * Distributed under the Boost Software License, Version 1.0. 6 1.1 mrg * https://www.boost.org/LICENSE_1_0.txt 7 1.1 mrg * https://github.com/dlang/dmd/blob/master/src/dmd/common/outbuffer.h 8 1.1 mrg */ 9 1.1 mrg 10 1.1 mrg #pragma once 11 1.1 mrg 12 1.1 mrg #include "../root/dsystem.h" 13 1.1 mrg #include "../root/dcompat.h" 14 1.1 mrg #include "../root/rmem.h" 15 1.1 mrg 16 1.1 mrg class RootObject; 17 1.1 mrg 18 1.1 mrg struct OutBuffer 19 1.1 mrg { 20 1.1 mrg // IMPORTANT: PLEASE KEEP STATE AND DESTRUCTOR IN SYNC WITH DEFINITION IN ./outbuffer.d. 21 1.1 mrg private: 22 1.1 mrg DArray<unsigned char> data; 23 1.1 mrg d_size_t offset; 24 1.1 mrg bool notlinehead; 25 1.1 mrg void *fileMapping; // pointer to a file mapping object not used on the C++ side 26 1.1 mrg public: 27 1.1 mrg bool doindent; 28 1.1 mrg bool spaces; 29 1.1 mrg int level; 30 1.1 mrg 31 1.1 mrg OutBuffer() 32 1.1 mrg { 33 1.1 mrg data = DArray<unsigned char>(); 34 1.1 mrg offset = 0; 35 1.1 mrg 36 1.1 mrg doindent = 0; 37 1.1 mrg level = 0; 38 1.1 mrg notlinehead = 0; 39 1.1 mrg fileMapping = 0; 40 1.1 mrg } 41 1.1 mrg ~OutBuffer() 42 1.1 mrg { 43 1.1 mrg mem.xfree(data.ptr); 44 1.1 mrg } 45 1.1 mrg d_size_t length() const { return offset; } 46 1.1 mrg char *extractData(); 47 1.1 mrg void destroy(); 48 1.1 mrg 49 1.1 mrg void reserve(d_size_t nbytes); 50 1.1 mrg void setsize(d_size_t size); 51 1.1 mrg void reset(); 52 1.1 mrg void write(const void *data, d_size_t nbytes); 53 1.1 mrg void writestring(const char *string); 54 1.1 mrg void prependstring(const char *string); 55 1.1 mrg void writenl(); // write newline 56 1.1 mrg void writeByte(unsigned b); 57 1.1 mrg void writeUTF8(unsigned b); 58 1.1 mrg void prependbyte(unsigned b); 59 1.1 mrg void writewchar(unsigned w); 60 1.1 mrg void writeword(unsigned w); 61 1.1 mrg void writeUTF16(unsigned w); 62 1.1 mrg void write4(unsigned w); 63 1.1 mrg void write(const OutBuffer *buf); 64 1.1 mrg void write(RootObject *obj); 65 1.1 mrg void fill0(d_size_t nbytes); 66 1.1 mrg void vprintf(const char *format, va_list args); 67 1.1 mrg void printf(const char *format, ...); 68 1.1 mrg void bracket(char left, char right); 69 1.1 mrg d_size_t bracket(d_size_t i, const char *left, d_size_t j, const char *right); 70 1.1 mrg void spread(d_size_t offset, d_size_t nbytes); 71 1.1 mrg d_size_t insert(d_size_t offset, const void *data, d_size_t nbytes); 72 1.1 mrg void remove(d_size_t offset, d_size_t nbytes); 73 1.1 mrg // Append terminating null if necessary and get view of internal buffer 74 1.1 mrg char *peekChars(); 75 1.1 mrg // Append terminating null if necessary and take ownership of data 76 1.1 mrg char *extractChars(); 77 1.1 mrg }; 78