Read,
Write
};
+ enum FlushType {
+ FlushShallow,
+ FlushDeep
+ };
+public:
+ static bool isZLibCompressed(const std::string &filename);
+ static bool isSnappyCompressed(const std::string &filename);
public:
File(const std::string &filename = std::string(),
File::Mode mode = File::Read);
bool write(const void *buffer, int length);
bool read(void *buffer, int length);
void close();
- void flush();
- char getc();
+ void flush(FlushType type = FlushShallow);
+ int getc();
protected:
virtual bool rawOpen(const std::string &filename, File::Mode mode) = 0;
virtual bool rawWrite(const void *buffer, int length) = 0;
virtual bool rawRead(void *buffer, int length) = 0;
- virtual char rawGetc() = 0;
+ virtual int rawGetc() = 0;
virtual void rawClose() = 0;
- virtual void rawFlush() = 0;
+ virtual void rawFlush(FlushType type) = 0;
protected:
std::string m_filename;
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 char rawGetc();
+ virtual int rawGetc();
virtual void rawClose();
- virtual void rawFlush();
+ virtual void rawFlush(FlushType type);
private:
void *m_gzFile;
};
-namespace snappy {
- class File;
-}
-
-#define SNAPPY_CHUNK_SIZE (1 * 1024 * 1024)
-class SnappyFile : public File {
-public:
- SnappyFile(const std::string &filename = std::string(),
- File::Mode mode = File::Read);
- virtual ~SnappyFile();
-
-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 char rawGetc();
- virtual void rawClose();
- virtual void rawFlush();
-
-private:
- inline int freeCacheSize() const
- {
- if (m_cacheSize > 0)
- return m_cacheSize - (m_cachePtr - m_cache);
- else
- return 0;
- }
- void flushCache();
- void createCache(size_t size);
-private:
- std::fstream m_stream;
- char *m_cache;
- char *m_cachePtr;
- size_t m_cacheSize;
-
- char *m_compressedCache;
-};
-
-
}
#endif