From: José Fonseca Date: Sun, 28 Nov 2010 12:16:52 +0000 (+0000) Subject: Keep active calls in a list. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=89851d0c9d794e37338ed3e9e4a993189ac0577f;p=apitrace Keep active calls in a list. --- diff --git a/trace_parser.hpp b/trace_parser.hpp index 5b1758d..f8eb9b5 100644 --- a/trace_parser.hpp +++ b/trace_parser.hpp @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -50,8 +51,8 @@ class Parser protected: gzFile file; - typedef std::map callmap; - callmap calls; + typedef std::list CallList; + CallList calls; typedef std::map FunctionMap; FunctionMap functions; @@ -145,12 +146,21 @@ public: call->no = next_call_no++; parse_call_details(call); - calls[call->no] = call; + + calls.push_back(call); } Call *parse_leave(void) { unsigned call_no = read_uint(); - Call *call = calls[call_no]; + + Call *call = NULL; + for (CallList::iterator it = calls.begin(); it != calls.end(); ++it) { + if ((*it)->no == call_no) { + call = *it; + calls.erase(it); + break; + } + } assert(call); if (!call) { return NULL;