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