]> git.cworth.org Git - apitrace/blobdiff - trace_model.hpp
Portability fixes.
[apitrace] / trace_model.hpp
index 0bcd1804be03791df0ffbbfa4fb4d76074ad6d2f..71581e88e27a21a31844aec7f3102f33b90627f0 100644 (file)
@@ -104,6 +104,8 @@ public:
 };
 
 
+#undef Bool
+
 class Bool : public Value
 {
 public:
@@ -159,10 +161,10 @@ public:
 };
 
 
-class Const : public Value
+class Enum : public Value
 {
 public:
-   Const(std::string _name, Value *_value) : name(_name), value(_value) {}
+   Enum(std::string &_name, Value *_value) : name(_name), value(_value) {}
 
    void visit(Visitor &visitor);
 
@@ -185,6 +187,23 @@ public:
 };
 
 
+class Struct : public Value
+{
+public:
+   struct Signature {
+      std::string name;
+      std::vector<std::string> member_names;
+   };
+
+   Struct(Signature *_sig) : sig(_sig), members(_sig->member_names.size()) { }
+
+   void visit(Visitor &visitor);
+
+   const Signature *sig;
+   std::vector<Value *> members;
+};
+
+
 class Array : public Value
 {
 public:
@@ -224,8 +243,9 @@ public:
    virtual void visit(UInt *) {assert(0);}
    virtual void visit(Float *) {assert(0);}
    virtual void visit(String *) {assert(0);}
-   virtual void visit(Const *) {assert(0);}
+   virtual void visit(Enum *) {assert(0);}
    virtual void visit(Bitmask *bitmask) {visit(static_cast<UInt *>(bitmask));}
+   virtual void visit(Struct *) {assert(0);}
    virtual void visit(Array *) {assert(0);}
    virtual void visit(Blob *) {assert(0);}
 
@@ -246,25 +266,31 @@ unsigned long long asUInt(const Value &node);
 double asFloat(const Value &node);
 
 
-typedef std::pair<std::string, Value *> Arg;
-
 class Call
 {
 public:
+   struct Signature {
+      std::string name;
+      std::vector<std::string> arg_names;
+   };
+
    unsigned no;
-   std::string name;
-   std::vector<Arg> args;
+   const Signature *sig;
+   std::vector<Value *> args;
    Value *ret;
 
-   Call() : ret(0) { }
+   Call(Signature *_sig) : sig(_sig), args(_sig->arg_names.size()), ret(0) { }
+
+   inline const std::string name(void) const {
+       return sig->name;
+   }
 
    inline Value & arg(unsigned index) {
-       return *(args[index].second);
+       return *(args[index]);
    }
 };
 
 
-
 std::ostream & operator <<(std::ostream &os, Call &call);