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();
void write_chars(const char *start, size_t length)
Appends the indicated stream of characters to the current file position.
void clear()
Empties the buffer.
size_t read_chars(char *start, size_t length)
Attempts to extract the indicated number of characters from the current file position.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.