Beispiel #1
0
bool CMemoryByteSourceReader::EndOfData(void) const
{
    if (!m_CurrentChunk) {
        return true;
    }
    if (GetCurrentChunkAvailable() != 0) {
        return false;
    }
    return !(m_CurrentChunk->GetNextChunk());
}
Beispiel #2
0
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;
}