MCPcopy Create free account
hub / github.com/ddnet/ddnet / ReadChunkHeader

Method ReadChunkHeader

src/engine/shared/demo.cpp:512–575  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

510}
511
512CDemoPlayer::EReadChunkHeaderResult CDemoPlayer::ReadChunkHeader(int *pType, int *pSize, int *pTick)
513{
514 *pSize = 0;
515 *pType = 0;
516
517 unsigned char Chunk = 0;
518 if(io_read(m_File, &Chunk, sizeof(Chunk)) != sizeof(Chunk))
519 return CHUNKHEADER_EOF;
520
521 if(Chunk & CHUNKTYPEFLAG_TICKMARKER)
522 {
523 // decode tick marker
524 int TickdeltaLegacy = Chunk & CHUNKMASK_TICK_LEGACY; // compatibility
525 *pType = Chunk & (CHUNKTYPEFLAG_TICKMARKER | CHUNKTICKFLAG_KEYFRAME);
526
527 int NewTick;
528 if(m_Info.m_Header.m_Version < gs_VersionTickCompression && TickdeltaLegacy != 0)
529 {
530 if(*pTick < 0) // initial tick not initialized before a tick delta
531 return CHUNKHEADER_ERROR;
532 NewTick = *pTick + TickdeltaLegacy;
533 }
534 else if(Chunk & CHUNKTICKFLAG_TICK_COMPRESSED)
535 {
536 if(*pTick < 0) // initial tick not initialized before a tick delta
537 return CHUNKHEADER_ERROR;
538 int Tickdelta = Chunk & CHUNKMASK_TICK;
539 NewTick = *pTick + Tickdelta;
540 }
541 else
542 {
543 unsigned char aTickdata[sizeof(int32_t)];
544 if(io_read(m_File, aTickdata, sizeof(aTickdata)) != sizeof(aTickdata))
545 return CHUNKHEADER_ERROR;
546 NewTick = bytes_be_to_uint(aTickdata);
547 }
548 if(NewTick < MIN_TICK || NewTick >= MAX_TICK) // invalid tick
549 return CHUNKHEADER_ERROR;
550 *pTick = NewTick;
551 }
552 else
553 {
554 // decode normal chunk
555 *pType = (Chunk & CHUNKMASK_TYPE) >> 5;
556 *pSize = Chunk & CHUNKMASK_SIZE;
557
558 if(*pSize == 30)
559 {
560 unsigned char aSizedata[1];
561 if(io_read(m_File, aSizedata, sizeof(aSizedata)) != sizeof(aSizedata))
562 return CHUNKHEADER_ERROR;
563 *pSize = aSizedata[0];
564 }
565 else if(*pSize == 31)
566 {
567 unsigned char aSizedata[2];
568 if(io_read(m_File, aSizedata, sizeof(aSizedata)) != sizeof(aSizedata))
569 return CHUNKHEADER_ERROR;

Callers

nothing calls this directly

Calls 2

io_readFunction · 0.85
bytes_be_to_uintFunction · 0.85

Tested by

no test coverage detected