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