Home | History | Annotate | Line # | Download | only in common
      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