fixing a debug print
[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 #if CMK_WITH_CONTROLPOINT
69
70 namespace ControlPoint {
71
72   enum DIRECTION {EFF_DEC, EFF_INC};
73
74   class ControlPointAssociation {
75   public:
76     std::set<int> EntryID;
77     std::set<int> ArrayGroupIdx;
78       ControlPointAssociation() {
79         // nothing here yet
80       }
81   };
82   
83   class ControlPointAssociatedEntry : public ControlPointAssociation {
84     public :
85         ControlPointAssociatedEntry() : ControlPointAssociation() {}
86
87         ControlPointAssociatedEntry(int epid) : ControlPointAssociation() {
88           EntryID.insert(epid);
89         }    
90   };
91   
92   class ControlPointAssociatedArray : public ControlPointAssociation {
93   public:
94     ControlPointAssociatedArray() : ControlPointAssociation() {}
95
96     ControlPointAssociatedArray(const CProxy_ArrayBase &a) : ControlPointAssociation() {
97       CkGroupID aid = a.ckGetArrayID();
98       int groupIdx = aid.idx;
99       ArrayGroupIdx.insert(groupIdx);
100     }
101   };
102   
103   class NoControlPointAssociation : public ControlPointAssociation { };
104
105
106   void initControlPointEffects();
107   ControlPointAssociatedEntry assocWithEntry(const int entry);
108   ControlPointAssociatedArray assocWithArray(const CProxy_ArrayBase &array);
109
110  //                 effect               cp                 direction           associations
111   typedef std::map<std::string,std::map<std::string, std::pair<int, std::vector<ControlPoint::ControlPointAssociation> > > > cp_effect_map;
112
113  //                   cp                          direction           associations
114  //  typedef std::map<std::string, std::vector<std::pair<int, ControlPoint::ControlPointAssociation> > > cp_name_map;
115
116
117 namespace EffectIncrease {
118 $funcdecls
119 }
120
121 namespace EffectDecrease {
122 $funcdecls
123 }
124
125
126 } //namespace ControlPoint
127
128 CkpvExtern(ControlPoint::cp_effect_map, cp_effects);
129 //CkpvExtern(ControlPoint::cp_name_map, cp_names);
130
131 #endif
132 #endif
133 EOF
134
135
136 print OUT_CPP <<EOF;
137 ///////////////////////////////////////////////////////////////////
138 // WARNING: THIS FILE IS GENERATED BY cp_effects.pl
139 //          ANY CHANGES TO THIS FILE MAY BE LOST 
140 ///////////////////////////////////////////////////////////////////
141
142 #include "cp_effects.h"
143
144 #if CMK_WITH_CONTROLPOINT
145
146 using namespace ControlPoint;
147 using namespace std;
148
149 CkpvDeclare(ControlPoint::cp_effect_map, cp_effects);
150 //CkpvDeclare(ControlPoint::cp_name_map, cp_names);
151
152 NoControlPointAssociation default_assoc;
153
154 ControlPoint::ControlPointAssociatedEntry ControlPoint::assocWithEntry(const int entry) {
155     ControlPointAssociatedEntry e(entry);
156     return e;
157 }
158
159 ControlPoint::ControlPointAssociatedArray ControlPoint::assocWithArray(const CProxy_ArrayBase &array) {
160     ControlPointAssociatedArray a(array);
161     return a;
162 }
163
164 void ControlPoint::initControlPointEffects() {
165     CkpvInitialize(cp_effect_map, cp_effects);
166 //    CkpvInitialize(cp_name_map, cp_names);
167 }
168
169 void testControlPointEffects() {
170 $funccalls
171 }
172
173 void insert(const std::string effect, const std::string name, const ControlPoint::ControlPointAssociation &assoc, const int direction) {
174    std::pair<int, std::vector<ControlPoint::ControlPointAssociation> > &info = CkpvAccess(cp_effects)[effect][name];
175    info.first = direction;
176    info.second.push_back(assoc);
177   // CkpvAccess(cp_names)[name] = make_pair(push_back(std::make_pair(direction, assoc));
178 }
179
180 $funcdefs
181
182 #endif
183 EOF