1 #include "trace_file.hpp"
3 #include "trace_snappyfile.hpp"
14 using namespace Trace;
17 File::File(const std::string &filename,
19 : m_filename(filename),
23 if (!m_filename.empty()) {
24 open(m_filename, m_mode);
34 bool File::isOpened() const
39 File::Mode File::mode() const
44 std::string File::filename() const
49 bool File::open(const std::string &filename, File::Mode mode)
54 m_isOpened = rawOpen(filename, mode);
60 bool File::write(const void *buffer, int length)
62 if (!m_isOpened || m_mode != File::Write) {
65 return rawWrite(buffer, length);
68 bool File::read(void *buffer, int length)
70 if (!m_isOpened || m_mode != File::Read) {
73 return rawRead(buffer, length);
84 void File::flush(FlushType type)
91 if (!m_isOpened || m_mode != File::Read) {
97 bool File::isZLibCompressed(const std::string &filename)
99 std::fstream stream(filename.c_str(),
100 std::fstream::binary | std::fstream::in);
101 if (!stream.is_open())
104 unsigned char byte1, byte2;
109 return (byte1 == 0x1f && byte2 == 0x8b);
113 bool File::isSnappyCompressed(const std::string &filename)
115 std::fstream stream(filename.c_str(),
116 std::fstream::binary | std::fstream::in);
117 if (!stream.is_open())
120 unsigned char byte1, byte2;
125 return (byte1 == SNAPPY_BYTE1 && byte2 == SNAPPY_BYTE2);
129 ZLibFile::ZLibFile(const std::string &filename,
131 : File(filename, mode),
136 ZLibFile::~ZLibFile()
140 bool ZLibFile::rawOpen(const std::string &filename, File::Mode mode)
142 m_gzFile = gzopen(filename.c_str(),
143 (mode == File::Write) ? "wb" : "rb");
144 return m_gzFile != NULL;
147 bool ZLibFile::rawWrite(const void *buffer, int length)
149 return gzwrite(m_gzFile, buffer, length) != -1;
152 bool ZLibFile::rawRead(void *buffer, int length)
154 return gzread(m_gzFile, buffer, length) != -1;
157 int ZLibFile::rawGetc()
159 return gzgetc(m_gzFile);
162 void ZLibFile::rawClose()
170 void ZLibFile::rawFlush(FlushType type)
172 gzflush(m_gzFile, Z_SYNC_FLUSH);