*
**************************************************************************/
+/*
+ * Trace writing functions.
+ */
+
#ifndef _TRACE_WRITE_HPP_
#define _TRACE_WRITE_HPP_
+#include <stddef.h>
+
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;
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);
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);
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);