]> git.cworth.org Git - apitrace/blobdiff - trace_model.hpp
Split gltrace.cpp code into multiple files.
[apitrace] / trace_model.hpp
index 62316e9ea7edfa27d985441ae132abac98d6f146..6adf4c2a55d44a9d286c9ad84d0e376ebd8885fa 100644 (file)
@@ -54,10 +54,10 @@ public:
     virtual ~Value() {}
     virtual void visit(Visitor &visitor) = 0;
 
-    operator bool (void) const;
-    operator signed long long (void) const;
-    operator unsigned long long (void) const;
-    operator double (void) const;
+    virtual operator bool (void) const = 0;
+    virtual operator signed long long (void) const;
+    virtual operator unsigned long long (void) const;
+    virtual operator double (void) const;
 
     virtual void *blob(void) const;
     const char *string(void) const;
@@ -105,18 +105,24 @@ public:
 class Null : public Value
 {
 public:
+    operator bool (void) const;
+    operator signed long long (void) const;
+    operator unsigned long long (void) const;
+    operator double (void) const;
     void *blob(void) const;
     void visit(Visitor &visitor);
 };
 
 
-#undef Bool
-
 class Bool : public Value
 {
 public:
     Bool(bool _value) : value(_value) {}
 
+    operator bool (void) const;
+    operator signed long long (void) const;
+    operator unsigned long long (void) const;
+    operator double (void) const;
     void visit(Visitor &visitor);
 
     bool value;
@@ -128,6 +134,10 @@ class SInt : public Value
 public:
     SInt(signed long long _value) : value(_value) {}
 
+    operator bool (void) const;
+    operator signed long long (void) const;
+    operator unsigned long long (void) const;
+    operator double (void) const;
     void visit(Visitor &visitor);
 
     signed long long value;
@@ -139,6 +149,10 @@ class UInt : public Value
 public:
     UInt(unsigned long long _value) : value(_value) {}
 
+    operator bool (void) const;
+    operator signed long long (void) const;
+    operator unsigned long long (void) const;
+    operator double (void) const;
     void visit(Visitor &visitor);
 
     unsigned long long value;
@@ -150,6 +164,10 @@ class Float : public Value
 public:
     Float(double _value) : value(_value) {}
 
+    operator bool (void) const;
+    operator signed long long (void) const;
+    operator unsigned long long (void) const;
+    operator double (void) const;
     void visit(Visitor &visitor);
 
     double value;
@@ -161,6 +179,7 @@ class String : public Value
 public:
     String(std::string _value) : value(_value) {}
 
+    operator bool (void) const;
     void visit(Visitor &visitor);
 
     std::string value;
@@ -174,6 +193,10 @@ public:
 
     Enum(const Signature *_sig) : sig(_sig) {}
 
+    operator bool (void) const;
+    operator signed long long (void) const;
+    operator unsigned long long (void) const;
+    operator double (void) const;
     void visit(Visitor &visitor);
 
     const Signature *sig;
@@ -205,6 +228,7 @@ public:
     Struct(Signature *_sig) : sig(_sig), members(_sig->member_names.size()) { }
     ~Struct();
 
+    operator bool (void) const;
     void visit(Visitor &visitor);
 
     const Signature *sig;
@@ -218,6 +242,7 @@ public:
     Array(size_t len) : values(len) {}
     ~Array();
 
+    operator bool (void) const;
     void visit(Visitor &visitor);
 
     std::vector<Value *> values;
@@ -234,6 +259,7 @@ public:
 
     ~Blob();
 
+    operator bool (void) const;
     void *blob(void) const;
     void visit(Visitor &visitor);
 
@@ -247,6 +273,7 @@ class Pointer : public UInt
 public:
     Pointer(unsigned long long value) : UInt(value) {}
 
+    operator bool (void) const;
     void *blob(void) const;
     void visit(Visitor &visitor);
 };