28 _buffer = (
char *)PANDA_MALLOC_ARRAY(2048);
29 char *ebuf = _buffer + 2048;
30 char *mbuf = _buffer + 1024;
31 setg(_buffer, mbuf, mbuf);
40 char *m = b + (t - b) / 2;
55 PANDA_FREE_ARRAY(_buffer);
68 pbump(pbase() - pptr());
69 gbump(egptr() - gptr());
85 if (_data.size() <= _gpos) {
89 length = std::min(length, _data.size() - _gpos);
90 memcpy(start, &_data[_gpos], length);
102 size_t n = egptr() - gptr();
106 if (_data.size() > _ppos) {
108 size_t remaining_length = _data.size() - _ppos;
109 size_t overwrite_length = std::min(remaining_length, length);
110 memcpy(&_data[_ppos], start, overwrite_length);
111 length -= overwrite_length;
112 _ppos += overwrite_length;
113 start += overwrite_length;
116 if (_data.size() < _ppos) {
118 _data.insert(_data.end(), _ppos - _data.size(), (
unsigned char)0);
123 _data.insert(_data.begin() + _ppos, (
const unsigned char *)start, (
const unsigned char *)start + length);
132 streampos StringStreamBuf::
133 seekoff(streamoff off, ios_seekdir dir, ios_openmode which) {
134 streampos result = -1;
139 if (which & ios::in) {
141 size_t n = egptr() - gptr();
144 size_t cur_pos = _gpos;
145 size_t new_pos = cur_pos;
150 new_pos = (size_t)off;
154 new_pos = (size_t)((
int)cur_pos + off);
158 new_pos = (size_t)((
int)_data.size() + off);
170 if (which & ios::out) {
172 size_t n = pptr() - pbase();
173 size_t cur_pos = _ppos + n;
174 size_t new_pos = cur_pos;
179 new_pos = (size_t)off;
183 new_pos = (size_t)((
int)cur_pos + off);
187 new_pos = (size_t)((
int)_data.size() + off);
211 streampos StringStreamBuf::
212 seekpos(streampos pos, ios_openmode which) {
213 return seekoff(pos, ios::beg, which);
220 int StringStreamBuf::
222 size_t n = pptr() - pbase();
241 int StringStreamBuf::
243 size_t n = pptr() - pbase();
255 int StringStreamBuf::
258 if (gptr() >= egptr()) {
260 size_t buffer_size = egptr() - eback();
261 gbump(-(
int)buffer_size);
263 size_t num_bytes = buffer_size;
264 size_t read_count =
read_chars(gptr(), buffer_size);
266 if (read_count != num_bytes) {
268 if (read_count == 0) {
274 nassertr(read_count < num_bytes, EOF);
275 size_t delta = num_bytes - read_count;
276 memmove(gptr() + delta, gptr(), read_count);
281 return (
unsigned char)*gptr();
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void clear()
Empties the buffer.
void write_chars(const char *start, size_t length)
Appends the indicated stream of characters to the current file position.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
size_t read_chars(char *start, size_t length)
Attempts to extract the indicated number of characters from the current file position.