Quiet constness warnings about string constants passed to REGISTER_LANGUAGE.
[charm.git] / src / conv-perf / traceCore.h
1
2 #ifndef __TRACE_CORE_H__
3 #define __TRACE_CORE_H__
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8
9 #include "converse.h"
10
11 #define MAX_NUM_LANGUAGES  32                   //NOTE: fixed temporarily
12
13
14
15 /* Prototype Declarations */
16 class TraceCore;
17 class TraceLogger;
18 class TraceEntry;
19
20 CpvCExtern(int, _traceCoreOn);
21 /*** structure of events ***/
22
23 struct TraceCoreEvent {
24         int eID;
25         struct TraceCoreEvent *next;
26 };
27
28 /* Class Declarations */
29 class TraceCore
30 {
31   private:
32         TraceLogger* traceLogger;
33         void startPtc();
34         void closePtc();
35         FILE *fpPtc;    // File pointer for the ptc file
36         struct TraceCoreEvent  *eventLists[MAX_NUM_LANGUAGES];
37         int maxlID;
38         int maxeID[MAX_NUM_LANGUAGES];
39         int numLangs;
40         int numEvents[MAX_NUM_LANGUAGES];
41         int lIDList[MAX_NUM_LANGUAGES];
42         char *lNames[MAX_NUM_LANGUAGES];
43         int traceCoreOn;
44   public:
45         TraceCore(char** argv);
46         ~TraceCore();
47
48         //TODO: some of these methods are for temporary use only
49         void RegisterLanguage(int lID);
50         void RegisterLanguage(int lID, const char* lName);
51         void RegisterEvent(int lID, int eID);
52         void LogEvent(int lID, int eID);
53         void LogEvent(int lID, int eID, int iLen, const int* iData);
54         void LogEvent(int lID, int eID, int iLen, const int* iData,double t);
55         void LogEvent(int lID, int eID, int sLen, const char* sData);
56         void LogEvent(int lID, int eID, int iLen, const int* iData, int sLen, const char* sData);
57
58 };
59
60 class TraceEntry
61 {
62   public:
63         int    languageID;
64         int    eventID;
65         double timestamp;
66         int    eLen;
67         int*   entity;
68         int    iLen;
69         int*   iData;
70         int    sLen;
71         char*  sData;
72
73         TraceEntry() {}
74         TraceEntry(int lID, int eID, double ts, int el, int* e,
75                          int il, int* i, int sl, char* s):
76                          languageID(lID), eventID(eID), timestamp(ts),
77                          eLen(el), entity(e), iLen(il), iData(i), sLen(sl), sData(s) {}
78         TraceEntry(int lID, int eID, double ts,
79                          int il, int* i, int sl, char* s):
80                          languageID(lID), eventID(eID), timestamp(ts),
81                          eLen(0), entity(NULL), iLen(il), iData(i), sLen(sl), sData(s) {}
82         TraceEntry(TraceEntry& te);
83         ~TraceEntry();
84
85     void *operator new(size_t s) {void*ret=malloc(s);_MEMCHECK(ret);return ret;}
86     void *operator new(size_t, void *ptr) { return ptr; }
87     void operator delete(void *ptr) { free(ptr); }
88 #if defined(WIN32) || CMK_MULTIPLE_DELETE
89     void operator delete(void *, void *) { }
90 #endif
91
92         void write(FILE* fp, int prevLID, int prevSeek, int nextLID, int nextSeek);
93 };
94
95 class TraceLogger
96 {
97   private:
98     int poolSize;
99     int numEntries;
100     TraceEntry *pool;
101     TraceEntry *buffer;
102
103         int   numLangs;
104  char *lName[MAX_NUM_LANGUAGES];                // Language Name
105     char *fName[MAX_NUM_LANGUAGES];             // File name
106     FILE *fptrs[MAX_NUM_LANGUAGES];             // File pointer
107
108     int   binary;
109
110         int lastWriteFlag;              // set when writing log to file at end of program
111         int prevLID, prevSeek;  // for writing logs to file
112         int isWriting;
113
114   public:
115     TraceLogger(char* program, int b);
116     ~TraceLogger();
117
118     void RegisterLanguage(int lID, const char* ln);
119
120     void write(void);
121     void writeBinary(void);
122         void writeSts(void);
123
124     void add(int lID, int eID, double timestamp, int iLen, int* iData, int sLen, char* sData);
125     void initlogfiles();
126
127
128   private:
129         void openLogFiles();
130         void closeLogFiles();
131         void verifyFptrs();
132         void flushLogFiles();
133
134         char* pgm;
135 };
136
137 #endif