m_stream >> byte2;
assert(byte1 == SNAPPY_BYTE1 && byte2 == SNAPPY_BYTE2);
- flushCache();
+ flushReadCache();
} else if (m_stream.is_open() && mode == File::Write) {
// write the snappy file identifier
m_stream << SNAPPY_BYTE1;
} else if (freeCacheSize() == length) {
memcpy(m_cachePtr, buffer, length);
m_cachePtr += length;
- flushCache();
+ flushWriteCache();
} else {
int sizeToWrite = length;
memcpy(m_cachePtr, (const char*)buffer + offset, endSize);
sizeToWrite -= endSize;
m_cachePtr += endSize;
- flushCache();
+ flushWriteCache();
}
if (sizeToWrite) {
int offset = length - sizeToWrite;
memcpy((char*)buffer + offset, m_cachePtr, chunkSize);
m_cachePtr += chunkSize;
sizeToRead -= chunkSize;
- if (sizeToRead > 0)
- flushCache();
- if (!m_cacheSize)
+ if (sizeToRead > 0) {
+ flushReadCache();
+ }
+ if (!m_cacheSize) {
break;
+ }
}
}
void SnappyFile::rawClose()
{
- flushCache();
+ if (m_mode == File::Write) {
+ flushWriteCache();
+ }
m_stream.close();
delete [] m_cache;
m_cache = NULL;
void SnappyFile::rawFlush()
{
- flushCache();
+ assert(m_mode == File::Write);
+ flushWriteCache();
m_stream.flush();
}
-void SnappyFile::flushCache()
+void SnappyFile::flushWriteCache()
{
- if (m_mode == File::Write) {
- size_t inputLength = usedCacheSize();
+ size_t inputLength = usedCacheSize();
- if (inputLength) {
- size_t compressedLength;
+ if (inputLength) {
+ size_t compressedLength;
- ::snappy::RawCompress(m_cache, inputLength,
- m_compressedCache, &compressedLength);
+ ::snappy::RawCompress(m_cache, inputLength,
+ m_compressedCache, &compressedLength);
- writeCompressedLength(compressedLength);
- m_stream.write(m_compressedCache, compressedLength);
- m_cachePtr = m_cache;
- }
- assert(m_cachePtr == m_cache);
- } else if (m_mode == File::Read) {
- //assert(m_cachePtr == m_cache + m_cacheSize);
- size_t compressedLength;
- compressedLength = readCompressedLength();
-
- if (compressedLength) {
- m_stream.read((char*)m_compressedCache, compressedLength);
- ::snappy::GetUncompressedLength(m_compressedCache, compressedLength,
- &m_cacheSize);
- createCache(m_cacheSize);
- ::snappy::RawUncompress(m_compressedCache, compressedLength,
- m_cache);
- } else {
- createCache(0);
- }
+ writeCompressedLength(compressedLength);
+ m_stream.write(m_compressedCache, compressedLength);
+ m_cachePtr = m_cache;
+ }
+ assert(m_cachePtr == m_cache);
+}
+
+void SnappyFile::flushReadCache()
+{
+ //assert(m_cachePtr == m_cache + m_cacheSize);
+ size_t compressedLength;
+ compressedLength = readCompressedLength();
+
+ if (compressedLength) {
+ m_stream.read((char*)m_compressedCache, compressedLength);
+ ::snappy::GetUncompressedLength(m_compressedCache, compressedLength,
+ &m_cacheSize);
+ createCache(m_cacheSize);
+ ::snappy::RawUncompress(m_compressedCache, compressedLength,
+ m_cache);
+ } else {
+ createCache(0);
}
}