1 ///////////////////////////////////////////////////////////////////////////////
5 ///////////////////////////////////////////////////////////////////////////////
10 ///////////////////////////////////////////////////////////////////////////////
12 // Constructor and destructor
14 ///////////////////////////////////////////////////////////////////////////////
15 TextBuffer::TextBuffer() : buffer(0), limit(0), cursor(0) {}
16 TextBuffer::~TextBuffer() { if (buffer
) free (buffer
); }
18 ///////////////////////////////////////////////////////////////////////////////
20 // Transfer text from one buffer to another.
22 ///////////////////////////////////////////////////////////////////////////////
23 TextBuffer::TextBuffer (const TextBuffer
& b
)
24 { TextBuffer
* B
= (TextBuffer
*)&b
;
33 ///////////////////////////////////////////////////////////////////////////////
35 // Transfer text from one buffer to another.
37 ///////////////////////////////////////////////////////////////////////////////
38 void TextBuffer::operator = (const TextBuffer
& b
)
39 { if (&b
== this) return;
40 if (buffer
) free (buffer
); // kill self
41 TextBuffer
* B
= (TextBuffer
*)&b
;
50 ///////////////////////////////////////////////////////////////////////////////
54 ///////////////////////////////////////////////////////////////////////////////
55 void TextBuffer::emit (const char * text
, long len
)
56 { if (len
< 0) len
= strlen(text
);
57 if (cursor
+ len
>= limit
) grow(len
);
58 memcpy(cursor
, text
, len
);
62 ///////////////////////////////////////////////////////////////////////////////
66 ///////////////////////////////////////////////////////////////////////////////
67 void TextBuffer::emit (char c
)
68 { if (cursor
+ 1 >= limit
) grow(256);
72 ///////////////////////////////////////////////////////////////////////////////
74 // Method to expand the buffer
76 ///////////////////////////////////////////////////////////////////////////////
77 void TextBuffer::grow (size_t growth
)
78 { size_t old_size
= cursor
- buffer
;
79 size_t new_size
= (limit
- buffer
) * 2 + growth
;
81 buffer
= (char *)realloc(buffer
, new_size
);
83 buffer
= (char *)malloc(new_size
);
84 cursor
= buffer
+ old_size
;
85 limit
= buffer
+ new_size
;