#ifndef _TRACE_WRITER_HPP_
#define _TRACE_WRITER_HPP_
+
#include <stddef.h>
#include <vector>
-namespace Trace {
-
- typedef unsigned Id;
+#include "trace_model.hpp"
- struct FunctionSig {
- Id id;
- const char *name;
- unsigned num_args;
- const char **arg_names;
- };
- struct StructSig {
- Id id;
- const char *name;
- unsigned num_members;
- const char **member_names;
- };
-
- struct EnumSig {
- Id id;
- const char *name;
- signed long long value;
- };
-
- struct BitmaskVal {
- const char *name;
- unsigned long long value;
- };
-
- struct BitmaskSig {
- Id id;
- unsigned count;
- const BitmaskVal *values;
- };
+namespace Trace {
+ class File;
class Writer {
protected:
- void *g_gzFile;
+ File *m_file;
unsigned call_no;
std::vector<bool> functions;
bool open(const char *filename);
void close(void);
- unsigned beginEnter(const FunctionSig &function);
+ unsigned beginEnter(const FunctionSig *sig);
void endEnter(void);
void beginLeave(unsigned call);
void writeWString(const wchar_t *str);
void writeBlob(const void *data, size_t size);
void writeEnum(const EnumSig *sig);
- void writeBitmask(const BitmaskSig &bitmask, unsigned long long value);
+ void writeBitmask(const BitmaskSig *sig, unsigned long long value);
void writeNull(void);
void writeOpaque(const void *ptr);
+ void writeCall(Call *call);
+
protected:
void inline _write(const void *sBuffer, size_t dwBytesToWrite);
void inline _writeByte(char c);