X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;ds=sidebyside;f=trace_model.hpp;h=6adf4c2a55d44a9d286c9ad84d0e376ebd8885fa;hb=041e5be6105ab6b43841f525b17afb6d982323b0;hp=90fa0f6da47987893c8424a3e137f349bee5a1fc;hpb=d1744a1e5cc3763ac6678426eb43b1f9b2d8d5b1;p=apitrace diff --git a/trace_model.hpp b/trace_model.hpp index 90fa0f6..6adf4c2 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,17 +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; @@ -127,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; @@ -138,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; @@ -149,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; @@ -160,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; @@ -173,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; @@ -204,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; @@ -217,6 +242,7 @@ public: Array(size_t len) : values(len) {} ~Array(); + operator bool (void) const; void visit(Visitor &visitor); std::vector values; @@ -233,6 +259,8 @@ public: ~Blob(); + operator bool (void) const; + void *blob(void) const; void visit(Visitor &visitor); size_t size; @@ -245,6 +273,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); };