]> git.cworth.org Git - apitrace/blobdiff - trace_model.hpp
Handle vertex attriv locations correctly.
[apitrace] / trace_model.hpp
index 8436fc1afac77bb7dd6ab8a08b5351a71d458376..e7a2249c7c979833fbd8e7519ef3f18a5a9c22c0 100644 (file)
@@ -31,7 +31,7 @@
 #define _TRACE_MODEL_HPP_
 
 
-#include <cassert>
+#include <assert.h>
 
 #include <string>
 #include <map>
@@ -54,49 +54,15 @@ public:
     virtual ~Value() {}
     virtual void visit(Visitor &visitor) = 0;
 
-    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 bool toBool(void) const = 0;
+    virtual signed long long toSInt(void) const;
+    virtual unsigned long long toUInt(void) const;
+    virtual float toFloat(void) const;
+    virtual double toDouble(void) const;
 
-    virtual void *blob(void) const;
-    const char *string(void) const;
-
-    inline operator signed char (void) const { 
-        return static_cast<signed long long>(*this);
-    }
-
-    inline operator unsigned char (void) const { 
-        return static_cast<signed long long>(*this);
-    }
-
-    inline operator signed short (void) const { 
-        return static_cast<signed long long>(*this);
-    }
-
-    inline operator unsigned short (void) const { 
-        return static_cast<unsigned long long>(*this);
-    }
-
-    inline operator signed (void) const { 
-        return static_cast<signed long long>(*this);
-    }
-
-    inline operator unsigned (void) const { 
-        return static_cast<unsigned long long>(*this);
-    }
-
-    inline operator signed long (void) const { 
-        return static_cast<signed long long>(*this);
-    }
-
-    inline operator unsigned long (void) const { 
-        return static_cast<unsigned long long>(*this);
-    }
-
-    inline operator float (void) const { 
-        return static_cast<double>(*this);
-    }
+    virtual void *toPointer(void) const;
+    virtual unsigned long long toUIntPtr(void) const;
+    virtual const char *toString(void) const;
 
     const Value & operator[](size_t index) const;
 };
@@ -105,11 +71,14 @@ 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;
+    bool toBool(void) const;
+    signed long long toSInt(void) const;
+    unsigned long long toUInt(void) const;
+    virtual float toFloat(void) const;
+    virtual double toDouble(void) const;
+    void *toPointer(void) const;
+    unsigned long long toUIntPtr(void) const;
+    const char *toString(void) const;
     void visit(Visitor &visitor);
 };
 
@@ -119,10 +88,11 @@ 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;
+    bool toBool(void) const;
+    signed long long toSInt(void) const;
+    unsigned long long toUInt(void) const;
+    virtual float toFloat(void) const;
+    virtual double toDouble(void) const;
     void visit(Visitor &visitor);
 
     bool value;
@@ -134,10 +104,11 @@ 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;
+    bool toBool(void) const;
+    signed long long toSInt(void) const;
+    unsigned long long toUInt(void) const;
+    virtual float toFloat(void) const;
+    virtual double toDouble(void) const;
     void visit(Visitor &visitor);
 
     signed long long value;
@@ -149,10 +120,11 @@ 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;
+    bool toBool(void) const;
+    signed long long toSInt(void) const;
+    unsigned long long toUInt(void) const;
+    virtual float toFloat(void) const;
+    virtual double toDouble(void) const;
     void visit(Visitor &visitor);
 
     unsigned long long value;
@@ -164,10 +136,11 @@ 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;
+    bool toBool(void) const;
+    signed long long toSInt(void) const;
+    unsigned long long toUInt(void) const;
+    virtual float toFloat(void) const;
+    virtual double toDouble(void) const;
     void visit(Visitor &visitor);
 
     double value;
@@ -179,7 +152,8 @@ class String : public Value
 public:
     String(std::string _value) : value(_value) {}
 
-    operator bool (void) const;
+    bool toBool(void) const;
+    const char *toString(void) const;
     void visit(Visitor &visitor);
 
     std::string value;
@@ -205,10 +179,11 @@ 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;
+    bool toBool(void) const;
+    signed long long toSInt(void) const;
+    unsigned long long toUInt(void) const;
+    virtual float toFloat(void) const;
+    virtual double toDouble(void) const;
     void visit(Visitor &visitor);
 
     const Signature *sig;
@@ -240,7 +215,7 @@ public:
     Struct(Signature *_sig) : sig(_sig), members(_sig->member_names.size()) { }
     ~Struct();
 
-    operator bool (void) const;
+    bool toBool(void) const;
     void visit(Visitor &visitor);
 
     const Signature *sig;
@@ -254,7 +229,7 @@ public:
     Array(size_t len) : values(len) {}
     ~Array();
 
-    operator bool (void) const;
+    bool toBool(void) const;
     void visit(Visitor &visitor);
 
     std::vector<Value *> values;
@@ -271,8 +246,8 @@ public:
 
     ~Blob();
 
-    operator bool (void) const;
-    void *blob(void) const;
+    bool toBool(void) const;
+    void *toPointer(void) const;
     void visit(Visitor &visitor);
 
     size_t size;
@@ -285,8 +260,9 @@ class Pointer : public UInt
 public:
     Pointer(unsigned long long value) : UInt(value) {}
 
-    operator bool (void) const;
-    void *blob(void) const;
+    bool toBool(void) const;
+    void *toPointer(void) const;
+    unsigned long long toUIntPtr(void) const;
     void visit(Visitor &visitor);
 };
 
@@ -319,11 +295,6 @@ protected:
 std::ostream & operator <<(std::ostream &os, Value *value);
 
 
-signed long long asSInt(const Value &node);
-unsigned long long asUInt(const Value &node);
-double asFloat(const Value &node);
-
-
 class Call
 {
 public:
@@ -340,11 +311,12 @@ public:
     Call(Signature *_sig) : sig(_sig), args(_sig->arg_names.size()), ret(0) { }
     ~Call();
 
-    inline const std::string name(void) const {
+    inline const std::string name(void) const {
         return sig->name;
     }
 
     inline Value & arg(unsigned index) {
+        assert(index < args.size());
         return *(args[index]);
     }
 };