Simplifies things a little, and makes the code slightly more robust,
as I trying to figure out why sometimes I get traces with trailing
garbagge.
void SnappyFile::flushCache()
{
if (m_mode == File::Write) {
void SnappyFile::flushCache()
{
if (m_mode == File::Write) {
- size_t compressedLength;
+ size_t inputLength = usedCacheSize();
+
+ if (inputLength) {
+ size_t compressedLength;
- ::snappy::RawCompress(m_cache, SNAPPY_CHUNK_SIZE - freeCacheSize(),
- m_compressedCache, &compressedLength);
+ ::snappy::RawCompress(m_cache, inputLength,
+ m_compressedCache, &compressedLength);
- writeCompressedLength(compressedLength);
- m_stream.write(m_compressedCache, compressedLength);
- m_cachePtr = m_cache;
+ 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;
} else if (m_mode == File::Read) {
//assert(m_cachePtr == m_cache + m_cacheSize);
size_t compressedLength;
#ifndef TRACE_SNAPPYFILE_HPP
#define TRACE_SNAPPYFILE_HPP
#ifndef TRACE_SNAPPYFILE_HPP
#define TRACE_SNAPPYFILE_HPP
#include "trace_file.hpp"
#include <string>
#include "trace_file.hpp"
#include <string>
virtual void rawFlush();
private:
virtual void rawFlush();
private:
+ inline size_t usedCacheSize() const
+ {
+ assert(m_cachePtr >= m_cache);
+ return m_cachePtr - m_cache;
+ }
inline size_t freeCacheSize() const
{
inline size_t freeCacheSize() const
{
- if (m_cacheSize > 0)
- return m_cacheSize - (m_cachePtr - m_cache);
- else
+ assert(m_cacheSize >= usedCacheSize());
+ if (m_cacheSize > 0) {
+ return m_cacheSize - usedCacheSize();
+ } else {
}
inline bool endOfData() const
{
}
inline bool endOfData() const
{