]> git.cworth.org Git - apitrace/blobdiff - trace_parser.hpp
Remove unused files.
[apitrace] / trace_parser.hpp
index 15b0ccb9b03f0964b5ce1c5418488e23bfb5afe7..3aaa6d3a93f16cb71c85116185cee0d4d9cba14e 100644 (file)
@@ -29,7 +29,6 @@
 
 #include <iostream>
 #include <list>
-#include <set>
 
 #include "trace_file.hpp"
 #include "trace_format.hpp"
 
 namespace Trace {
 
+
+struct ParseBookmark
+{
+    File::Offset offset;
+    unsigned next_call_no;
+};
+
+
 class Parser
 {
 protected:
     File *file;
 
+    enum Mode {
+        FULL = 0,
+        SCAN,
+        SKIP
+    };
+
     typedef std::list<Call *> CallList;
     CallList calls;
 
-    typedef std::vector<FunctionSig *> FunctionMap;
-    FunctionMap functions;
+    // Helper template that extends a base signature structure, with additional
+    // parsing information.
+    template< class T >
+    struct SigState : public T {
+        // Offset in the file of where signature was defined.  It is used when
+        // reparsing to determine whether the signature definition is to be
+        // expected next or not.
+        File::Offset offset;
+    };
+
+    typedef SigState<FunctionSig> FunctionSigState;
+    typedef SigState<StructSig> StructSigState;
+    typedef SigState<EnumSig> EnumSigState;
+    typedef SigState<BitmaskSig> BitmaskSigState;
+
+    typedef std::vector<FunctionSigState *> FunctionMap;
+    typedef std::vector<StructSigState *> StructMap;
+    typedef std::vector<EnumSigState *> EnumMap;
+    typedef std::vector<BitmaskSigState *> BitmaskMap;
 
-    typedef std::vector<StructSig *> StructMap;
+    FunctionMap functions;
     StructMap structs;
-
-    typedef std::vector<EnumSig *> EnumMap;
     EnumMap enums;
-
-    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;
-
-    bool m_supportsSeeking;
-
     unsigned next_call_no;
 
 public:
@@ -82,121 +97,97 @@ public:
 
     void close(void);
 
-    Call *parse_call(void);
+    Call *parse_call(void) {
+        return parse_call(FULL);
+    }
 
     bool supportsOffsets() const
     {
         return file->supportsOffsets();
     }
 
-    File::Offset currentOffset()
-    {
-        return file->currentOffset();
-    }
-
-    void setCurrentOffset(const File::Offset &offset)
-    {
-        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 getBookmark(ParseBookmark &bookmark);
 
-    void setCurrentCallNumber(unsigned num)
-    {
-        next_call_no = num;
-    }
+    void setBookmark(const ParseBookmark &bookmark);
 
     int percentRead()
     {
         return file->percentRead();
     }
 
-    Call *scan_call();
+    Call *scan_call() {
+        return parse_call(SCAN);
+    }
 
 protected:
-    void parse_enter(void);
-
-    Call *parse_leave(void);
-
-    bool parse_call_details(Call *call);
-
-    void parse_arg(Call *call);
-
-    Value *parse_value(void);
-
-    Value *parse_sint();
-
-    Value *parse_uint();
-
-    Value *parse_float();
+    Call *parse_call(Mode mode);
 
-    Value *parse_double();
-
-    Value *parse_string();
-
-    Value *parse_enum();
-
-    Value *parse_bitmask();
-
-    Value *parse_array(void);
-
-    Value *parse_blob(void);
-
-    Value *parse_struct();
-
-    Value *parse_opaque();
-
-    const char * read_string(void);
-
-    unsigned long long read_uint(void);
+    FunctionSig *parse_function_sig(void);
+    StructSig *parse_struct_sig();
+    EnumSig *parse_enum_sig();
+    BitmaskSig *parse_bitmask_sig();
+    
+    Call *parse_Call(Mode mode);
 
-    inline int read_byte(void);
-
-protected:
-    void scan_enter(void);
+    void parse_enter(Mode mode);
 
-    Call *scan_leave(void);
+    Call *parse_leave(Mode mode);
 
-    bool scan_call_details(Call *call);
+    bool parse_call_details(Call *call, Mode mode);
 
-    void scan_arg(Call *call);
+    void parse_arg(Call *call, Mode mode);
 
+    Value *parse_value(void);
     void scan_value(void);
+    inline Value *parse_value(Mode mode) {
+        if (mode == FULL) {
+            return parse_value();
+        } else {
+            scan_value();
+            return NULL;
+        }
+    }
 
+    Value *parse_sint();
     void scan_sint();
 
+    Value *parse_uint();
     void scan_uint();
 
+    Value *parse_float();
     void scan_float();
 
+    Value *parse_double();
     void scan_double();
 
+    Value *parse_string();
     void scan_string();
 
+    Value *parse_enum();
     void scan_enum();
 
+    Value *parse_bitmask();
     void scan_bitmask();
 
+    Value *parse_array(void);
     void scan_array(void);
 
+    Value *parse_blob(void);
     void scan_blob(void);
 
+    Value *parse_struct();
     void scan_struct();
 
+    Value *parse_opaque();
     void scan_opaque();
 
+    const char * read_string(void);
     void skip_string(void);
 
+    unsigned long long read_uint(void);
     void skip_uint(void);
 
+    inline int read_byte(void);
     inline void skip_byte(void);
 };