Adding a ControlPointsNoTrace module that provides the control point interface but...
[charm.git] / src / ck-cp / API-generator / cp_effects.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 # Generate forward declarations for all types of control point effects.
7 # each one takes a name and an association (arrayProxy and/or entryID).
8 # use C++ to overload the function names.
9
10 open(OUT_H, ">cp_effects.h");
11 open(OUT_CPP, ">cp_effects.C");
12 open(FILE, "cp_effects.txt");
13
14 my $funcdecls;
15 my $funccalls;
16 my $funcdefs;
17
18 while(my $line = <FILE>) {
19   chomp $line;
20
21   if(length($line) > 0) {
22     my $cp = $line;
23
24     $funcdecls .= "\tvoid $cp(std::string name, const ControlPoint::ControlPointAssociation &a);\n";
25     $funcdecls .= "\tvoid $cp(std::string name);\n";
26
27     $funccalls .= "\tControlPoint::EffectIncrease::$cp(\"name\");\n";
28     $funccalls .= "\tControlPoint::EffectDecrease::$cp(\"name\");\n";
29     $funccalls .= "\tControlPoint::EffectIncrease::$cp(\"name\", assocWithEntry(0));\n";
30     $funccalls .= "\tControlPoint::EffectDecrease::$cp(\"name\", assocWithEntry(0));\n";
31     #$funccalls .= "\tControlPoint::EffectIncrease::$cp(\"name\", assocWithArray(0));\n";
32     #$funccalls .= "\tControlPoint::EffectDecrease::$cp(\"name\", assocWithArray(0));\n";
33
34     $funcdefs .= "void ControlPoint::EffectDecrease::$cp(std::string s, const ControlPoint::ControlPointAssociation &a) {\n" .
35         "\tinsert(\"$cp\", s, a, EFF_DEC);\n" .
36         "}\n";
37     $funcdefs .= "void ControlPoint::EffectIncrease::$cp(std::string s, const ControlPoint::ControlPointAssociation &a) {\n" .
38         "\tinsert(\"$cp\", s, a, EFF_INC);\n" .
39         "}\n";
40     $funcdefs .= "void ControlPoint::EffectDecrease::$cp(std::string s) {\n" .
41         "\tinsert(\"$cp\", s, default_assoc, EFF_DEC);\n" .
42         "}\n";
43     $funcdefs .= "void ControlPoint::EffectIncrease::$cp(std::string s) {\n" .
44         "\tinsert(\"$cp\", s, default_assoc, EFF_INC);\n" .
45         "}\n";
46   }
47 }
48
49 print OUT_H <<EOF;
50 #include <string>
51 #include <vector>
52 #include <set>
53 #include <map>
54 #include <utility>
55 #include <charm++.h>
56 #include <ck.h>
57 #include <ckarray.h>
58
59 ///////////////////////////////////////////////////////////////////
60 // WARNING: THIS FILE IS GENERATED BY cp_effects.pl
61 //          ANY CHANGES TO THIS FILE MAY BE LOST 
62 ///////////////////////////////////////////////////////////////////
63
64
65 #ifndef __CP_EFFECTS_H__
66 #define __CP_EFFECTS_H__
67
68 namespace ControlPoint {
69
70   enum DIRECTION {EFF_DEC, EFF_INC};
71
72   class ControlPointAssociation {
73   public:
74     std::set<int> EntryID;
75     std::set<int> ArrayGroupIdx;
76       ControlPointAssociation() {
77         // nothing here yet
78       }
79   };
80   
81   class ControlPointAssociatedEntry : public ControlPointAssociation {
82     public :
83         ControlPointAssociatedEntry() : ControlPointAssociation() {}
84
85         ControlPointAssociatedEntry(int epid) : ControlPointAssociation() {
86           EntryID.insert(epid);
87         }    
88   };
89   
90   class ControlPointAssociatedArray : public ControlPointAssociation {
91   public:
92     ControlPointAssociatedArray() : ControlPointAssociation() {}
93
94     ControlPointAssociatedArray(const CProxy_ArrayBase &a) : ControlPointAssociation() {
95       CkGroupID aid = a.ckGetArrayID();
96       int groupIdx = aid.idx;
97       ArrayGroupIdx.insert(groupIdx);
98     }
99   };
100   
101   class NoControlPointAssociation : public ControlPointAssociation { };
102
103
104   void initControlPointEffects();
105   ControlPointAssociatedEntry assocWithEntry(const int entry);
106   ControlPointAssociatedArray assocWithArray(const CProxy_ArrayBase &array);
107
108  //                 effect               cp                 direction           associations
109   typedef std::map<std::string,std::map<std::string, std::pair<int, std::vector<ControlPoint::ControlPointAssociation> > > > cp_effect_map;
110
111  //                   cp                          direction           associations
112  //  typedef std::map<std::string, std::vector<std::pair<int, ControlPoint::ControlPointAssociation> > > cp_name_map;
113
114
115 namespace EffectIncrease {
116 $funcdecls
117 }
118
119 namespace EffectDecrease {
120 $funcdecls
121 }
122
123
124 } //namespace ControlPoint
125
126 CkpvExtern(ControlPoint::cp_effect_map, cp_effects);
127 //CkpvExtern(ControlPoint::cp_name_map, cp_names);
128
129 #endif
130 EOF
131
132
133 print OUT_CPP <<EOF;
134 ///////////////////////////////////////////////////////////////////
135 // WARNING: THIS FILE IS GENERATED BY cp_effects.pl
136 //          ANY CHANGES TO THIS FILE MAY BE LOST 
137 ///////////////////////////////////////////////////////////////////
138
139 #include "cp_effects.h"
140
141
142 using namespace ControlPoint;
143 using namespace std;
144
145 CkpvDeclare(ControlPoint::cp_effect_map, cp_effects);
146 //CkpvDeclare(ControlPoint::cp_name_map, cp_names);
147
148 NoControlPointAssociation default_assoc;
149
150 ControlPoint::ControlPointAssociatedEntry ControlPoint::assocWithEntry(const int entry) {
151     ControlPointAssociatedEntry e(entry);
152     return e;
153 }
154
155 ControlPoint::ControlPointAssociatedArray ControlPoint::assocWithArray(const CProxy_ArrayBase &array) {
156     ControlPointAssociatedArray a(array);
157     return a;
158 }
159
160 void ControlPoint::initControlPointEffects() {
161     CkpvInitialize(cp_effect_map, cp_effects);
162 //    CkpvInitialize(cp_name_map, cp_names);
163 }
164
165 void testControlPointEffects() {
166 $funccalls
167 }
168
169 void insert(const std::string effect, const std::string name, const ControlPoint::ControlPointAssociation &assoc, const int direction) {
170    std::pair<int, std::vector<ControlPoint::ControlPointAssociation> > &info = CkpvAccess(cp_effects)[effect][name];
171    info.first = direction;
172    info.second.push_back(assoc);
173   // CkpvAccess(cp_names)[name] = make_pair(push_back(std::make_pair(direction, assoc));
174 }
175
176 $funcdefs
177
178 EOF