00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 INLINE DatagramIterator::
00026 DatagramIterator() :
00027 _datagram((Datagram *)NULL),
00028 _current_index(0)
00029 {
00030 }
00031
00032
00033
00034
00035
00036
00037 INLINE DatagramIterator::
00038 DatagramIterator(const Datagram &datagram, size_t offset) :
00039 _datagram(&datagram),
00040 _current_index(offset)
00041 {
00042 nassertv(_current_index <= _datagram->get_length());
00043 }
00044
00045
00046
00047
00048
00049
00050 INLINE DatagramIterator::
00051 DatagramIterator(const DatagramIterator ©) :
00052 _datagram(copy._datagram),
00053 _current_index(copy._current_index)
00054 {
00055 }
00056
00057
00058
00059
00060
00061
00062 INLINE void DatagramIterator::
00063 operator = (const DatagramIterator ©) {
00064 _datagram = copy._datagram;
00065 _current_index = copy._current_index;
00066 }
00067
00068
00069
00070
00071
00072
00073 INLINE DatagramIterator::
00074 ~DatagramIterator() {
00075 }
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 INLINE bool DatagramIterator::
00086 get_bool() {
00087 return (get_uint8() != 0);
00088 }
00089
00090
00091
00092
00093
00094
00095 INLINE PN_int8 DatagramIterator::
00096 get_int8() {
00097 nassertr(_datagram != (const Datagram *)NULL &&
00098 _current_index < _datagram->get_length(), 0);
00099
00100 const char *ptr = (const char *)_datagram->get_data();
00101 PN_int8 tempvar = (PN_int8)ptr[_current_index];
00102 _current_index++;
00103
00104 return tempvar;
00105 }
00106
00107
00108
00109
00110
00111
00112 INLINE PN_uint8 DatagramIterator::
00113 get_uint8() {
00114 nassertr(_datagram != (const Datagram *)NULL &&
00115 _current_index < _datagram->get_length(), 0);
00116
00117 const char *ptr = (const char *)_datagram->get_data();
00118 PN_uint8 tempvar = (PN_uint8)ptr[_current_index];
00119 _current_index++;
00120
00121 return tempvar;
00122 }
00123
00124
00125
00126
00127
00128
00129 INLINE PN_int16 DatagramIterator::
00130 get_int16() {
00131 nassertr(_datagram != (const Datagram *)NULL &&
00132 _current_index < _datagram->get_length(), 0);
00133
00134 PN_int16 tempvar;
00135 LittleEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00136 s.store_value(&tempvar, sizeof(tempvar));
00137 _current_index += sizeof(tempvar);
00138
00139 return tempvar;
00140 }
00141
00142
00143
00144
00145
00146
00147 INLINE PN_int32 DatagramIterator::
00148 get_int32() {
00149 nassertr(_datagram != (const Datagram *)NULL &&
00150 _current_index < _datagram->get_length(), 0);
00151
00152 PN_int32 tempvar;
00153 LittleEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00154 s.store_value(&tempvar, sizeof(tempvar));
00155 _current_index += sizeof(tempvar);
00156
00157 return tempvar;
00158 }
00159
00160
00161
00162
00163
00164
00165 INLINE PN_int64 DatagramIterator::
00166 get_int64() {
00167 nassertr(_datagram != (const Datagram *)NULL &&
00168 _current_index < _datagram->get_length(), 0);
00169
00170 PN_int64 tempvar;
00171 LittleEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00172 s.store_value(&tempvar, sizeof(tempvar));
00173 _current_index += sizeof(tempvar);
00174
00175 return tempvar;
00176 }
00177
00178
00179
00180
00181
00182
00183 INLINE PN_uint16 DatagramIterator::
00184 get_uint16() {
00185 nassertr(_datagram != (const Datagram *)NULL &&
00186 _current_index < _datagram->get_length(), 0);
00187
00188 PN_uint16 tempvar;
00189 LittleEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00190 s.store_value(&tempvar, sizeof(tempvar));
00191 _current_index += sizeof(tempvar);
00192
00193 return tempvar;
00194 }
00195
00196
00197
00198
00199
00200
00201 INLINE PN_uint32 DatagramIterator::
00202 get_uint32() {
00203 nassertr(_datagram != (const Datagram *)NULL &&
00204 _current_index < _datagram->get_length(), 0);
00205
00206 PN_uint32 tempvar;
00207 LittleEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00208 s.store_value(&tempvar, sizeof(tempvar));
00209 _current_index += sizeof(tempvar);
00210
00211 return tempvar;
00212 }
00213
00214
00215
00216
00217
00218
00219 INLINE PN_uint64 DatagramIterator::
00220 get_uint64() {
00221 nassertr(_datagram != (const Datagram *)NULL &&
00222 _current_index < _datagram->get_length(), 0);
00223
00224 PN_uint64 tempvar;
00225 LittleEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00226 s.store_value(&tempvar, sizeof(tempvar));
00227 _current_index += sizeof(tempvar);
00228
00229 return tempvar;
00230 }
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240 INLINE float DatagramIterator::
00241 get_float32() {
00242
00243
00244
00245 nassertr(sizeof(float) == 4, 0.0f);
00246 nassertr(_datagram != (const Datagram *)NULL &&
00247 _current_index < _datagram->get_length(), 0.0f);
00248
00249 float tempvar;
00250 LittleEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00251 s.store_value(&tempvar, sizeof(tempvar));
00252 _current_index += sizeof(tempvar);
00253
00254 return tempvar;
00255 }
00256
00257
00258
00259
00260
00261
00262 INLINE PN_float64 DatagramIterator::
00263 get_float64() {
00264 nassertr(_datagram != (const Datagram *)NULL &&
00265 _current_index < _datagram->get_length(), 0.0);
00266
00267 PN_float64 tempvar;
00268 LittleEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00269 s.store_value(&tempvar, sizeof(tempvar));
00270 _current_index += sizeof(tempvar);
00271
00272 return tempvar;
00273 }
00274
00275
00276
00277
00278
00279
00280 INLINE PN_int16 DatagramIterator::
00281 get_be_int16() {
00282 nassertr(_datagram != (const Datagram *)NULL &&
00283 _current_index < _datagram->get_length(), 0);
00284
00285 PN_int16 tempvar;
00286 BigEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00287 s.store_value(&tempvar, sizeof(tempvar));
00288 _current_index += sizeof(tempvar);
00289
00290 return tempvar;
00291 }
00292
00293
00294
00295
00296
00297
00298 INLINE PN_int32 DatagramIterator::
00299 get_be_int32() {
00300 nassertr(_datagram != (const Datagram *)NULL &&
00301 _current_index < _datagram->get_length(), 0);
00302
00303 PN_int32 tempvar;
00304 BigEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00305 s.store_value(&tempvar, sizeof(tempvar));
00306 _current_index += sizeof(tempvar);
00307
00308 return tempvar;
00309 }
00310
00311
00312
00313
00314
00315
00316 INLINE PN_int64 DatagramIterator::
00317 get_be_int64() {
00318 nassertr(_datagram != (const Datagram *)NULL &&
00319 _current_index < _datagram->get_length(), 0);
00320
00321 PN_int64 tempvar;
00322 BigEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00323 s.store_value(&tempvar, sizeof(tempvar));
00324 _current_index += sizeof(tempvar);
00325
00326 return tempvar;
00327 }
00328
00329
00330
00331
00332
00333
00334 INLINE PN_uint16 DatagramIterator::
00335 get_be_uint16() {
00336 nassertr(_datagram != (const Datagram *)NULL &&
00337 _current_index < _datagram->get_length(), 0);
00338
00339 PN_uint16 tempvar;
00340 BigEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00341 s.store_value(&tempvar, sizeof(tempvar));
00342 _current_index += sizeof(tempvar);
00343
00344 return tempvar;
00345 }
00346
00347
00348
00349
00350
00351
00352 INLINE PN_uint32 DatagramIterator::
00353 get_be_uint32() {
00354 nassertr(_datagram != (const Datagram *)NULL &&
00355 _current_index < _datagram->get_length(), 0);
00356
00357 PN_uint32 tempvar;
00358 BigEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00359 s.store_value(&tempvar, sizeof(tempvar));
00360 _current_index += sizeof(tempvar);
00361
00362 return tempvar;
00363 }
00364
00365
00366
00367
00368
00369
00370 INLINE PN_uint64 DatagramIterator::
00371 get_be_uint64() {
00372 nassertr(_datagram != (const Datagram *)NULL &&
00373 _current_index < _datagram->get_length(), 0);
00374
00375 PN_uint64 tempvar;
00376 BigEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00377 s.store_value(&tempvar, sizeof(tempvar));
00378 _current_index += sizeof(tempvar);
00379
00380 return tempvar;
00381 }
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391 INLINE float DatagramIterator::
00392 get_be_float32() {
00393
00394
00395
00396 nassertr(sizeof(float) == 4, 0.0f);
00397 nassertr(_datagram != (const Datagram *)NULL &&
00398 _current_index < _datagram->get_length(), 0.0f);
00399
00400 float tempvar;
00401 BigEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00402 s.store_value(&tempvar, sizeof(tempvar));
00403 _current_index += sizeof(tempvar);
00404
00405 return tempvar;
00406 }
00407
00408
00409
00410
00411
00412
00413 INLINE PN_float64 DatagramIterator::
00414 get_be_float64() {
00415 nassertr(_datagram != (const Datagram *)NULL &&
00416 _current_index < _datagram->get_length(), 0.0);
00417
00418 PN_float64 tempvar;
00419 BigEndian s(_datagram->get_data(), _current_index, sizeof(tempvar));
00420 s.store_value(&tempvar, sizeof(tempvar));
00421 _current_index += sizeof(tempvar);
00422
00423 return tempvar;
00424 }
00425
00426
00427
00428
00429
00430
00431
00432 INLINE void DatagramIterator::
00433 skip_bytes(size_t size) {
00434 nassertv((int)size >= 0);
00435 nassertv(_current_index + size <= _datagram->get_length());
00436 _current_index += size;
00437 }
00438
00439
00440
00441
00442
00443
00444
00445 INLINE string DatagramIterator::
00446 get_remaining_bytes() const {
00447 nassertr(_datagram != (const Datagram *)NULL &&
00448 _current_index <= _datagram->get_length(), "");
00449
00450 const char *ptr = (const char *)_datagram->get_data();
00451 int remaining_size = _datagram->get_length() - _current_index;
00452 return string(ptr + _current_index, remaining_size);
00453 }
00454
00455
00456
00457
00458
00459
00460 INLINE int DatagramIterator::
00461 get_remaining_size() const {
00462 return _datagram->get_length() - _current_index;
00463 }
00464
00465
00466
00467
00468
00469
00470 INLINE const Datagram &DatagramIterator::
00471 get_datagram() const {
00472 return *_datagram;
00473 }
00474
00475
00476
00477
00478
00479
00480
00481 INLINE size_t DatagramIterator::
00482 get_current_index() const {
00483 return _current_index;
00484 }