Mercurial > LightClone
view LightClone/Source/Trace.cpp @ 60:b0f642ee22d3
Additional maps
author | koryspansel <koryspansel@bendbroadband.com> |
---|---|
date | Mon, 03 Oct 2011 08:58:08 -0700 |
parents | 95677f648a2c |
children | 1fe27776627e |
line wrap: on
line source
/* * Trace */ #include "Trace.h" #if defined(TRACE_ENABLE) #include "Core.h" #include "ArrayList.h" #include <stdarg.h> #include <stdio.h> /* * MaximumTraceBufferSize */ static const uint32 MaximumTraceBufferSize = 1024; /* * kHandlers */ ArrayList<TraceHandler*> kHandlers; /* * ConsoleTraceHandler */ class ConsoleTraceHandler : public TraceHandler { public: /* * Trace */ virtual void Trace(const char* pBuffer, uint32 nSize) { printf(pBuffer); } }; /* * DebugTraceHandler */ class DebugTraceHandler : public TraceHandler { public: /* * Trace */ virtual void Trace(const char* pBuffer, uint32 nSize) { OutputDebugStringA(pBuffer); } }; /* * FileTraceHandler */ class FileTraceHandler : public TraceHandler { /* * pFile */ FILE* pFile; public: /* * FileTraceHandler */ FileTraceHandler(const char* pName) : pFile(NULL) { pFile = fopen(pName, "wt"); //ASSERT(pFile != NULL); } /* * ~FileTraceHandler */ ~FileTraceHandler() { if(pFile) { fclose(pFile); } } /* * Trace */ virtual void Trace(const char* pBuffer, uint32 nSize) { if(pFile) { fwrite(pBuffer, sizeof(char), nSize, pFile); fflush(pFile); } } }; /* * InitializeTrace */ ErrorCode InitializeTrace(uint32 nFlags) { if(nFlags & TraceFlag_Console) kHandlers.Add(new ConsoleTraceHandler()); if(nFlags & TraceFlag_Debug) kHandlers.Add(new DebugTraceHandler()); if(nFlags & TraceFlag_File) kHandlers.Add(new FileTraceHandler("Trace.txt")); return Error_Success; } /* * TerminateTrace */ void TerminateTrace() { for(uint32 i = 0; i < kHandlers.Size(); ++i) { delete kHandlers[i]; } kHandlers.Clear(); } /* * PerformTrace */ void PerformTrace(const char* pFormat, ...) { va_list kArguments; va_start(kArguments, pFormat); char kBuffer[MaximumTraceBufferSize]; int32 nCount = vsnprintf(kBuffer, sizeof(kBuffer), pFormat, kArguments); if(nCount > 0) { for(uint32 i = 0; i < kHandlers.Size(); ++i) { kHandlers[i]->Trace(kBuffer, nCount); } } va_end(kArguments); } #endif