1#ifndef __LIGHT_SYMBOLS__
2#define __LIGHT_SYMBOLS__
3#define LS_TRACE(functionName,fileId,lineNumber) LightSymbol __lstr(functionName,fileId,lineNumber);
4
5#include <stdio.h>
6#include <string.h>
7#include <stdlib.h>
8
9//#include <pthread.h>
10#include <windows.h>
11
12typedef char* SZ;
13
14#define LIGHT_SYMBOLS_FILE "LIGHT_SYMBOLS_FILE"
15
16class LightSymbol {
17  const char* sym;
18  int fileId;
19  int lineNumber;
20
21  LightSymbol* parentFrame;
22
23  typedef LightSymbol* PLightSymbol;
24
25  static PLightSymbol lsFrames[1000];
26  static HANDLE handleFrames[1000];
27  static SZ* fileNames;
28  static bool busted;
29
30public:
31  LightSymbol(const char* sym, int fileId, int lineNumber);
32
33  ~LightSymbol();
34
35  static bool GetCallStack(char* sz, int len, const char* separator);
36
37private:
38
39  static LightSymbol** getThreadFrameContainer();
40
41  bool GetCallStackCore(char* sz, int len, const char* separator) const ;
42
43  static LightSymbol* GetCurrentFrame() ;
44
45  static void SetCurrentFrame(LightSymbol* ls) ;
46
47  static const char* trim(char* sz) ;
48};
49
50#endif
51