Test generated code for entry method template declarations
[charm.git] / tests / charm++ / method_templates / pgm.C
1 #include "client.decl.h"
2 #include "mylib.h"
3 #define CK_TEMPLATES_ONLY
4 #include "mylib.def.h"
5 #undef CK_TEMPLATES_ONLY
6 #include <iostream>
7
8 // Utility functors
9 class add {
10     private:
11         int sum;
12     public:
13         add(): sum(0) {}
14         inline void operator() (int i) { sum += i; }
15         void pup(PUP::er &p) { p | sum; }
16         friend std::ostream& operator<< (std::ostream& out, const add& obj) {
17             out << "sum = " << obj.sum;
18             return out;
19         }
20 };
21
22
23 class avg {
24     private:
25         int sum, num;
26     public:
27         avg(): sum(0), num(0) {}
28         inline void operator() (int i) { sum += i; num++; }
29         void pup(PUP::er &p) { p | sum; p | num; }
30         friend std::ostream& operator<< (std::ostream& out, const avg& obj) {
31             out << "num = " << obj.num << "; "
32                 << "avg = " << ( obj.num ? obj.sum/obj.num : obj.sum );
33             return out;
34         }
35 };
36
37
38 // Temporary initproc to register the instantiated EPs
39 void register_instantiations()
40 {
41     add adder;
42     avg avger;
43     CkIndex_libArray::doSomething<add>(adder);
44     CkIndex_libArray::doSomething<avg>(avger);
45 };
46
47
48 // Test driver
49 class pgm : public CBase_pgm
50 {
51     public:
52         pgm(CkArgMsg *m): nElements(CkNumPes()), nDone(0)
53         {
54             arrProxy = CProxy_libArray::ckNew(nElements);
55             arrProxy.ckSetReductionClient( new CkCallback(CkIndex_pgm::endTest(), thisProxy) );
56             thisProxy.startTest();
57             delete m;
58         }
59         
60         void startTest() {
61             arrProxy.doSomething(add());
62             arrProxy.doSomething(avg());
63         }
64
65         void endTest() {
66             if (++nDone == 2)
67                 CkExit();
68         }
69
70     private:
71         CProxy_libArray arrProxy;
72         int nElements, nDone;
73 };
74
75 #include "client.def.h"
76