charmxi: CParsedFile.h header include guards
[charm.git] / src / xlat-i / sdag / CParsedFile.h
1 #ifndef CK_CPARSEDFILE_H
2 #define CK_CPARSEDFILE_H
3
4 #include "xi-symbol.h"
5 #include "CEntry.h"
6 #include "sdag-globals.h"
7 #include "EToken.h"
8 #include <list>
9 namespace xi {
10
11 class Chare;
12 class Entry;
13
14
15 /******************* CParsedFile ***********************/
16 class CParsedFile {
17   private:
18     void numberNodes(void);
19     void labelNodes(void);
20     void mapCEntry();                   // search and check if all functions in when() are defined.
21     void propagateState(void);
22     void generateConnectEntryList(void);
23     void generateEntryList(void);       // collect and setup CEntry list for When and If
24     void generateCode(XStr& decls, XStr& defs);
25     void generateEntries(XStr& decls, XStr& defs);
26     void generateConnectEntries(XStr& output);
27     void generateInitFunction(XStr& decls, XStr& defs);
28     void generatePupFunction(XStr& output);
29     void generateTraceEp(XStr& decls, XStr& defs);
30     void generateRegisterEp(XStr& decls, XStr& defs);
31     void generateDependencyMergePoints(XStr& output);
32     void generateTrace();
33     std::list<Entry*> nodeList;
34     TList<CEntry*> entryList;
35     TList<SdagConstruct *> connectEntryList;
36     Chare *container;
37
38   public:
39     static XStr *className;
40     CParsedFile(Chare *c): container(c) {}
41     ~CParsedFile(void){}
42     void print(int indent);
43     void addNode(Entry *e) { nodeList.push_back(e); }
44     void doProcess(XStr& classname, XStr& decls, XStr& defs) {
45       className = &classname;
46       decls << "#define " << classname << "_SDAG_CODE \n";
47
48       numberNodes();
49       labelNodes();
50       propagateState();
51       generateConnectEntryList();
52       generateTrace();
53       generateEntryList();
54       mapCEntry();
55       generateCode(decls, defs);
56       generateEntries(decls, defs);
57       generateInitFunction(decls, defs);
58       generatePupFunction(decls);
59       generateRegisterEp(decls, defs);
60       generateTraceEp(decls, defs);
61
62 #ifdef USE_CRITICAL_PATH_HEADER_ARRAY
63       generateDependencyMergePoints(decls); // for Isaac's Critical Path Detection
64 #endif
65
66       decls.line_append_padding('\\');
67       decls << "\n";
68     }
69
70 };
71
72 }
73
74 #endif