bool CMemoryByteSourceReader::EndOfData(void) const { if (!m_CurrentChunk) { return true; } if (GetCurrentChunkAvailable() != 0) { return false; } return !(m_CurrentChunk->GetNextChunk()); }
size_t CMemoryByteSourceReader::Read(char* buffer, size_t bufferLength) { while ( m_CurrentChunk ) { size_t avail = GetCurrentChunkAvailable(); if ( avail == 0 ) { // End of current chunk CConstRef<CMemoryChunk> rest = m_CurrentChunk->GetNextChunk(); m_CurrentChunk = rest; m_CurrentChunkOffset = 0; } else { size_t c = min(bufferLength, avail); memcpy(buffer, m_CurrentChunk->GetData(m_CurrentChunkOffset), c); m_CurrentChunkOffset += c; return c; } } return 0; }