642 |
} |
} |
643 |
|
|
644 |
/** |
/** |
645 |
* Returns number subchunks within the list. |
* Returns number of subchunks within the list. |
646 |
*/ |
*/ |
647 |
unsigned int List::CountSubChunks() { |
unsigned int List::CountSubChunks() { |
648 |
if (!pSubChunks) LoadSubChunks(); |
if (!pSubChunks) LoadSubChunks(); |
721 |
if (!pSubChunks) { |
if (!pSubChunks) { |
722 |
pSubChunks = new ChunkList(); |
pSubChunks = new ChunkList(); |
723 |
pSubChunksMap = new ChunkMap(); |
pSubChunksMap = new ChunkMap(); |
724 |
|
unsigned long uiOriginalPos = GetPos(); |
725 |
|
SetPos(0); // jump to beginning of list chunk body |
726 |
while (RemainingBytes() >= CHUNK_HEADER_SIZE) { |
while (RemainingBytes() >= CHUNK_HEADER_SIZE) { |
727 |
Chunk* ck; |
Chunk* ck; |
728 |
uint32_t ckid; |
uint32_t ckid; |
742 |
(*pSubChunksMap)[ckid] = ck; |
(*pSubChunksMap)[ckid] = ck; |
743 |
if (GetPos() % 2 != 0) SetPos(1, RIFF::stream_curpos); // jump over pad byte |
if (GetPos() % 2 != 0) SetPos(1, RIFF::stream_curpos); // jump over pad byte |
744 |
} |
} |
745 |
|
SetPos(uiOriginalPos); // restore position before this call |
746 |
} |
} |
747 |
} |
} |
748 |
|
|