#include <iostream>
#include <list>
+#include <set>
#include "trace_file.hpp"
#include "trace_format.hpp"
typedef std::vector<BitmaskSig *> BitmaskMap;
BitmaskMap bitmasks;
+ typedef std::set<File::Offset> TraceOffsets;
+ TraceOffsets m_callSigOffsets;
+ TraceOffsets m_structSigOffsets;
+ TraceOffsets m_enumSigOffsets;
+ TraceOffsets m_bitmaskSigOffsets;
+
+ typedef std::map<File::Offset, unsigned> CallNumOffsets;
+ CallNumOffsets m_callNumOffsets;
+
unsigned next_call_no;
public:
bool supportsOffsets() const
{
- return file-supportsOffsets();
+ return file->supportsOffsets();
}
File::Offset currentOffset()
file->setCurrentOffset(offset);
}
+ bool callWithSignature(const File::Offset &offset) const;
+ bool structWithSignature(const File::Offset &offset) const;
+ bool enumWithSignature(const File::Offset &offset) const;
+ bool bitmaskWithSignature(const File::Offset &offset) const;
+
+ unsigned currentCallNumber() const
+ {
+ return next_call_no;
+ }
+
+ void setCurrentCallNumber(unsigned num)
+ {
+ next_call_no = num;
+ }
+
+ int percentRead()
+ {
+ return file->percentRead();
+ }
+
+ Call *scan_call();
+
protected:
void parse_enter(void);
unsigned long long read_uint(void);
inline int read_byte(void);
+
+protected:
+ void scan_enter(void);
+
+ Call *scan_leave(void);
+
+ bool scan_call_details(Call *call);
+
+ void scan_arg(Call *call);
+
+ void scan_value(void);
+
+ void scan_sint();
+
+ void scan_uint();
+
+ void scan_float();
+
+ void scan_double();
+
+ void scan_string();
+
+ void scan_enum();
+
+ void scan_bitmask();
+
+ void scan_array(void);
+
+ void scan_blob(void);
+
+ void scan_struct();
+
+ void scan_opaque();
+
+ void skip_string(void);
+
+ void skip_uint(void);
+
+ inline void skip_byte(void);
};