X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=trace_snappyfile.hpp;h=33159ec73cc81eb4413158de707940a2c64c5211;hb=9d50fbb84f9b3086aa8e985e32534961336563b2;hp=2ee95bee8e94499e416267297ef774809056cc8d;hpb=8216d8efc428dd336957433d743af5c4ac2d0d05;p=apitrace diff --git a/trace_snappyfile.hpp b/trace_snappyfile.hpp index 2ee95be..33159ec 100644 --- a/trace_snappyfile.hpp +++ b/trace_snappyfile.hpp @@ -27,13 +27,13 @@ #ifndef TRACE_SNAPPYFILE_HPP #define TRACE_SNAPPYFILE_HPP +#include + #include "trace_file.hpp" #include #include -#include - namespace snappy { class File; } @@ -57,28 +57,38 @@ public: virtual void setCurrentOffset(const File::Offset &offset); protected: virtual bool rawOpen(const std::string &filename, File::Mode mode); - virtual bool rawWrite(const void *buffer, int length); - virtual bool rawRead(void *buffer, int length); + virtual bool rawWrite(const void *buffer, size_t length); + virtual bool rawRead(void *buffer, size_t length); virtual int rawGetc(); virtual void rawClose(); virtual void rawFlush(); + virtual bool rawSkip(size_t length); + virtual int rawPercentRead(); private: - inline int freeCacheSize() const + inline size_t usedCacheSize() const + { + assert(m_cachePtr >= m_cache); + return m_cachePtr - m_cache; + } + 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 { return 0; + } } inline bool endOfData() const { return m_stream.eof() && freeCacheSize() == 0; } - void flushCache(); + void flushWriteCache(); + void flushReadCache(size_t skipLength = 0); void createCache(size_t size); - void writeCompressedLength(uint32_t num); - uint32_t readCompressedLength(); + void writeCompressedLength(size_t length); + size_t readCompressedLength(); private: std::fstream m_stream; char *m_cache; @@ -88,6 +98,7 @@ private: char *m_compressedCache; File::Offset m_currentOffset; + std::streampos m_endPos; }; }