X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=trace_model.hpp;h=54c142e0f1c6e5d74cb7f2cdbaa49c1bb6d0f066;hb=4a7f226a294d6173737aa973c5cff9d80a538689;hp=90fa0f6da47987893c8424a3e137f349bee5a1fc;hpb=d1744a1e5cc3763ac6678426eb43b1f9b2d8d5b1;p=apitrace diff --git a/trace_model.hpp b/trace_model.hpp index 90fa0f6..54c142e 100644 --- a/trace_model.hpp +++ b/trace_model.hpp @@ -54,12 +54,12 @@ 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; - void *blob(void) const; + virtual void *blob(void) const; const char *string(void) const; inline operator signed char (void) const { @@ -105,6 +105,11 @@ 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); }; @@ -116,6 +121,10 @@ 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; @@ -127,6 +136,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; @@ -138,6 +151,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; @@ -149,6 +166,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; @@ -160,6 +181,7 @@ class String : public Value public: String(std::string _value) : value(_value) {} + operator bool (void) const; void visit(Visitor &visitor); std::string value; @@ -173,6 +195,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; @@ -204,6 +230,7 @@ public: Struct(Signature *_sig) : sig(_sig), members(_sig->member_names.size()) { } ~Struct(); + operator bool (void) const; void visit(Visitor &visitor); const Signature *sig; @@ -217,6 +244,7 @@ public: Array(size_t len) : values(len) {} ~Array(); + operator bool (void) const; void visit(Visitor &visitor); std::vector values; @@ -233,6 +261,8 @@ public: ~Blob(); + operator bool (void) const; + void *blob(void) const; void visit(Visitor &visitor); size_t size; @@ -245,6 +275,8 @@ class Pointer : public UInt public: Pointer(unsigned long long value) : UInt(value) {} + operator bool (void) const; + void *blob(void) const; void visit(Visitor &visitor); };