return rawGetc();
}
+bool File::isZLibCompressed(const std::string &filename)
+{
+ std::fstream stream(filename.c_str(),
+ std::fstream::binary | std::fstream::in);
+ if (!stream.is_open())
+ return false;
+
+ unsigned char byte1, byte2;
+ stream >> byte1;
+ stream >> byte2;
+ stream.close();
+
+ return (byte1 == 0x1f && byte2 == 0x8b);
+}
+
ZLibFile::ZLibFile(const std::string &filename,
File::Mode mode)
: File(filename, mode),
Read,
Write
};
+public:
+ static bool isZLibCompressed(const std::string &filename);
public:
File(const std::string &filename = std::string(),
File::Mode mode = File::Read);
Parser::Parser() {
- file = new Trace::SnappyFile;
+ file = NULL;
next_call_no = 0;
version = 0;
}
Parser::~Parser() {
close();
- delete file;
}
bool Parser::open(const char *filename) {
+ assert(!file);
+ if (File::isZLibCompressed(filename)) {
+ file = new ZLibFile;
+ } else {
+ file = new SnappyFile;
+ }
+
if (!file->open(filename, File::Read)) {
return false;
}
void Parser::close(void) {
file->close();
+ delete file;
+ file = NULL;
deleteAll(calls);
deleteAll(functions);