21 INLINE DatagramIterator::
32 INLINE DatagramIterator::
33 DatagramIterator(
const Datagram &datagram,
size_t offset) :
35 _current_index(offset) {
36 nassertv(_current_index <= _datagram->get_length());
44 INLINE DatagramIterator::
46 _datagram(copy._datagram),
47 _current_index(copy._current_index) {
55 INLINE
void DatagramIterator::
57 _datagram = copy._datagram;
58 _current_index = copy._current_index;
68 _current_index = offset;
75 INLINE DatagramIterator::
99 nassertr(_datagram != (
const Datagram *)NULL, 0);
101 nassertr(_current_index < _datagram->get_length(), 0);
103 const char *ptr = (
const char *)_datagram->
get_data();
104 PN_int8 tempvar = (PN_int8)ptr[_current_index];
117 nassertr(_datagram != (
const Datagram *)NULL, 0);
119 nassertr(_current_index < _datagram->get_length(), 0);
121 const char *ptr = (
const char *)_datagram->
get_data();
122 PN_uint8 tempvar = (PN_uint8)ptr[_current_index];
135 nassertr(_datagram != (
const Datagram *)NULL, 0);
136 nassertr(_current_index < _datagram->get_length(), 0);
140 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
143 s.store_value(&tempvar,
sizeof(tempvar));
144 _current_index +=
sizeof(tempvar);
156 nassertr(_datagram != (
const Datagram *)NULL, 0);
157 nassertr(_current_index < _datagram->get_length(), 0);
161 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
164 s.store_value(&tempvar,
sizeof(tempvar));
165 _current_index +=
sizeof(tempvar);
177 nassertr(_datagram != (
const Datagram *)NULL, 0);
178 nassertr(_current_index < _datagram->get_length(), 0);
182 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
185 s.store_value(&tempvar,
sizeof(tempvar));
186 _current_index +=
sizeof(tempvar);
198 nassertr(_datagram != (
const Datagram *)NULL, 0);
199 nassertr(_current_index < _datagram->get_length(), 0);
203 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
206 s.store_value(&tempvar,
sizeof(tempvar));
207 _current_index +=
sizeof(tempvar);
219 nassertr(_datagram != (
const Datagram *)NULL, 0);
220 nassertr(_current_index < _datagram->get_length(), 0);
224 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
227 s.store_value(&tempvar,
sizeof(tempvar));
228 _current_index +=
sizeof(tempvar);
240 nassertr(_datagram != (
const Datagram *)NULL, 0);
241 nassertr(_current_index < _datagram->get_length(), 0);
245 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
248 s.store_value(&tempvar,
sizeof(tempvar));
249 _current_index +=
sizeof(tempvar);
262 nassertr(_datagram != (
const Datagram *)NULL, 0.0);
263 nassertr(_current_index < _datagram->get_length(), 0.0);
267 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0.0);
271 _current_index +=
sizeof(tempvar);
283 nassertr(_datagram != (
const Datagram *)NULL, 0.0);
284 nassertr(_current_index < _datagram->get_length(), 0.0);
288 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0.0);
292 _current_index +=
sizeof(tempvar);
306 nassertr(_datagram != (
const Datagram *)NULL, 0.0);
321 nassertr(_datagram != (
const Datagram *)NULL, 0);
322 nassertr(_current_index < _datagram->get_length(), 0);
326 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
329 s.store_value(&tempvar,
sizeof(tempvar));
330 _current_index +=
sizeof(tempvar);
342 nassertr(_datagram != (
const Datagram *)NULL, 0);
343 nassertr(_current_index < _datagram->get_length(), 0);
347 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
350 s.store_value(&tempvar,
sizeof(tempvar));
351 _current_index +=
sizeof(tempvar);
363 nassertr(_datagram != (
const Datagram *)NULL, 0);
364 nassertr(_current_index < _datagram->get_length(), 0);
368 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
371 s.store_value(&tempvar,
sizeof(tempvar));
372 _current_index +=
sizeof(tempvar);
384 nassertr(_datagram != (
const Datagram *)NULL, 0);
385 nassertr(_current_index < _datagram->get_length(), 0);
389 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
392 s.store_value(&tempvar,
sizeof(tempvar));
393 _current_index +=
sizeof(tempvar);
405 nassertr(_datagram != (
const Datagram *)NULL, 0);
406 nassertr(_current_index < _datagram->get_length(), 0);
410 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
413 s.store_value(&tempvar,
sizeof(tempvar));
414 _current_index +=
sizeof(tempvar);
426 nassertr(_datagram != (
const Datagram *)NULL, 0);
427 nassertr(_current_index < _datagram->get_length(), 0);
431 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
434 s.store_value(&tempvar,
sizeof(tempvar));
435 _current_index +=
sizeof(tempvar);
448 nassertr(_datagram != (
const Datagram *)NULL, 0.0);
449 nassertr(_current_index < _datagram->get_length(), 0.0);
453 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0);
456 s.store_value(&tempvar,
sizeof(tempvar));
457 _current_index +=
sizeof(tempvar);
469 nassertr(_datagram != (
const Datagram *)NULL, 0.0);
470 nassertr(_current_index < _datagram->get_length(), 0.0);
474 nassertr(_current_index +
sizeof(tempvar) <= _datagram->
get_length(), 0.0);
478 _current_index +=
sizeof(tempvar);
491 nassertv(_datagram != (
const Datagram *)NULL);
492 nassertv((
int)size >= 0);
494 if (_current_index + size > _datagram->
get_length()) {
495 nout <<
"datagram overflow: current_index = " << _current_index
496 <<
" size = " << size <<
" length = " << _datagram->
get_length() <<
"\n";
500 nassertv(_current_index + size <= _datagram->get_length());
501 _current_index += size;
512 nassertr(_datagram != (
const Datagram *)NULL,
"");
513 nassertr(_current_index <= _datagram->get_length(),
"");
515 const char *ptr = (
const char *)_datagram->
get_data();
516 int remaining_size = _datagram->
get_length() - _current_index;
517 return string(ptr + _current_index, remaining_size);
527 return _datagram->
get_length() - _current_index;
548 return _current_index;
void assign(Datagram &datagram, size_t offset=0)
direct Assignment to a Datagram
PN_int8 get_int8()
Extracts a signed 8-bit integer.
PN_int64 get_be_int64()
Extracts a signed 64-bit big-endian integer.
bool get_bool()
Extracts a boolean value.
PN_stdfloat get_stdfloat()
Extracts either a 32-bit or a 64-bit floating-point number, according to Datagram::set_stdfloat_doubl...
PN_float64 get_be_float64()
Extracts a 64-bit big-endian floating-point number.
void dump_hex(ostream &out, unsigned int indent=0) const
Writes a representation of the entire datagram contents, as a sequence of hex (and ASCII) values...
const Datagram & get_datagram() const
Return the datagram of this iterator.
bool get_stdfloat_double() const
Returns the stdfloat_double flag.
PN_float32 get_be_float32()
Extracts a 32-bit big-endian single-precision floating-point number.
PN_int64 get_int64()
Extracts a signed 64-bit integer.
PN_int32 get_int32()
Extracts a signed 32-bit integer.
PN_uint8 get_uint8()
Extracts an unsigned 8-bit integer.
PN_uint32 get_uint32()
Extracts an unsigned 32-bit integer.
PN_int16 get_int16()
Extracts a signed 16-bit integer.
string get_string()
Extracts a variable-length string.
PN_uint16 get_uint16()
Extracts an unsigned 16-bit integer.
PN_float32 get_float32()
Extracts a 32-bit single-precision floating-point number.
size_t get_current_index() const
Returns the current position within the datagram of the next piece of data to extract.
int get_remaining_size() const
Return the bytes left in the datagram.
void skip_bytes(size_t size)
Skips over the indicated number of bytes in the datagram.
NativeNumericData and ReversedNumericData work together to provide a sneaky interface for automatical...
PN_uint32 get_be_uint32()
Extracts an unsigned 32-bit big-endian integer.
NativeNumericData and ReversedNumericData work together to provide a sneaky interface for automatical...
PN_int16 get_be_int16()
Extracts a signed 16-bit big-endian integer.
void store_value(void *dest, size_t length) const
Copies the data, with byte reversal if appropriate, into the indicated numeric variable, whose address and sizeof are given.
PN_float64 get_float64()
Extracts a 64-bit floating-point number.
A class to retrieve the individual data elements previously stored in a Datagram. ...
PN_uint64 get_uint64()
Extracts an unsigned 64-bit integer.
string get_remaining_bytes() const
Returns the remaining bytes in the datagram as a string, but does not extract them from the iterator...
PN_uint64 get_be_uint64()
Extracts an unsigned 64-bit big-endian integer.
PN_uint16 get_be_uint16()
Extracts an unsigned 16-bit big-endian integer.
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
void store_value(void *dest, size_t length) const
Copies the data, with byte reversal if appropriate, into the indicated numeric variable, whose address and sizeof are given.
wstring get_wstring()
Extracts a variable-length wstring (with a 32-bit length field).
PN_int32 get_be_int32()
Extracts a signed 32-bit big-endian integer.
size_t get_length() const
Returns the number of bytes in the datagram.
const void * get_data() const
Returns a pointer to the beginning of the datagram's data.