X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=trace_write.hpp;h=7ba1154655c0ee5c2368de4e9be752e961cfb705;hb=d0c9175f4e930773d732fd4a0de3d1f87da83012;hp=faa36a5eef44c61698c262b11a558caefab284ff;hpb=d35973cb47a75034dbbb64e9b0a91fcb4cc971d6;p=apitrace diff --git a/trace_write.hpp b/trace_write.hpp index faa36a5..7ba1154 100644 --- a/trace_write.hpp +++ b/trace_write.hpp @@ -23,13 +23,39 @@ * **************************************************************************/ +/* + * Trace writing functions. + */ + #ifndef _TRACE_WRITE_HPP_ #define _TRACE_WRITE_HPP_ +#include + namespace Trace { typedef unsigned Id; + struct FunctionSig { + Id id; + const char *name; + unsigned num_args; + const char **args; + }; + + struct StructSig { + Id id; + const char *name; + unsigned num_members; + const char **members; + }; + + struct EnumSig { + Id id; + const char *name; + signed long long value; + }; + struct BitmaskVal { const char *name; unsigned long long value; @@ -43,14 +69,14 @@ namespace Trace { void Open(void); void Close(void); - - unsigned BeginEnter(const char *function); + + unsigned BeginEnter(const FunctionSig &function); void EndEnter(void); - + void BeginLeave(unsigned call); void EndLeave(void); - - void BeginArg(unsigned index, const char *name); + + void BeginArg(unsigned index); inline void EndArg(void) {} void BeginReturn(void); @@ -62,12 +88,9 @@ namespace Trace { inline void BeginElement(void) {} inline void EndElement(void) {} - void BeginStruct(size_t length); + void BeginStruct(const StructSig *sig); inline void EndStruct(void) {} - void BeginMember(const char *name); - inline void EndMember(void) {} - void LiteralBool(bool value); void LiteralSInt(signed long long value); void LiteralUInt(unsigned long long value); @@ -77,7 +100,7 @@ namespace Trace { void LiteralString(const char *str, size_t size); void LiteralWString(const wchar_t *str); void LiteralBlob(const void *data, size_t size); - void LiteralNamedConstant(const char *name, long long value); + void LiteralEnum(const EnumSig *sig); void LiteralBitmask(const BitmaskSig &bitmask, unsigned long long value); void LiteralNull(void); void LiteralOpaque(const void *ptr);