X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=trace_parser.cpp;h=44d1786ac207fe2fa576a88c9cfae90339013fdc;hb=35c2793ac758997a0a1c2e558d384ab94754987d;hp=ebb6f077b6c786185a133725f86be8e111177526;hpb=b4954616efb4fdd8f8eb6bc8cbbeab501c92f1a2;p=apitrace diff --git a/trace_parser.cpp b/trace_parser.cpp index ebb6f07..44d1786 100644 --- a/trace_parser.cpp +++ b/trace_parser.cpp @@ -29,6 +29,7 @@ #include #include "trace_file.hpp" +#include "trace_snappyfile.hpp" #include "trace_parser.hpp" @@ -39,7 +40,7 @@ namespace Trace { Parser::Parser() { - file = new Trace::ZLibFile; + file = NULL; next_call_no = 0; version = 0; } @@ -47,11 +48,17 @@ Parser::Parser() { 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; } @@ -77,13 +84,18 @@ deleteAll(Iter begin, Iter end) template inline void -deleteAll(const Container &c) +deleteAll(Container &c) { deleteAll(c.begin(), c.end()); + c.clear(); } void Parser::close(void) { - file->close(); + if (file) { + file->close(); + delete file; + file = NULL; + } deleteAll(calls); deleteAll(functions);