X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=common%2Ftrace_model.hpp;h=93363219cdb271930104e35dfbecd3629da89251;hb=ec8f5a61f393e75e4c3e3e22f84c773af66810e9;hp=a2fd97f4a68b2c9a425ec0196d51f292641ef581;hpb=97ac28e65ca20b5649552597afaeee1d67766f6a;p=apitrace diff --git a/common/trace_model.hpp b/common/trace_model.hpp index a2fd97f..9336321 100644 --- a/common/trace_model.hpp +++ b/common/trace_model.hpp @@ -41,6 +41,10 @@ namespace trace { +// Should match Call::no +typedef unsigned CallNo; + + typedef unsigned Id; @@ -277,6 +281,11 @@ public: void visit(Visitor &visitor); std::vector values; + + inline size_t + size(void) const { + return values.size(); + } }; @@ -315,6 +324,35 @@ public: }; +class Repr : public Value +{ +public: + Repr(Value *human, Value *machine) : + humanValue(human), + machineValue(machine) + {} + + /** Human-readible value */ + Value *humanValue; + + /** Machine-readible value */ + Value *machineValue; + + virtual bool toBool(void) const; + 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 *toPointer(void) const; + virtual void *toPointer(bool bind); + virtual unsigned long long toUIntPtr(void) const; + virtual const char *toString(void) const; + + void visit(Visitor &visitor); +}; + + class Visitor { public: @@ -331,6 +369,7 @@ public: virtual void visit(Array *); virtual void visit(Blob *); virtual void visit(Pointer *); + virtual void visit(Repr *); protected: inline void _visit(Value *value) { @@ -434,7 +473,7 @@ public: CallFlags flags; - Call(FunctionSig *_sig, const CallFlags &_flags, unsigned _thread_id) : + Call(const FunctionSig *_sig, const CallFlags &_flags, unsigned _thread_id) : thread_id(_thread_id), sig(_sig), args(_sig->num_args),