Support #1725: Improving pup_stl testing
[charm.git] / examples / charm++ / PUP / STLPUP / SimplePUP.h
1 ///////////////////////////////////////
2 //
3 //  SimplePUP.h  
4 //
5 //  Declaration of chares in SimplePUP
6 //
7 //  Author: Eric Bohm
8 //  Date: 2012/01/23
9 //
10 ///////////////////////////////////////
11
12 #include "SimplePUP.decl.h"
13 #include <vector>
14 #include <cassert>
15
16 class main : public CBase_main {
17
18 public:
19
20   main(CkMigrateMessage *m) {}
21
22   main(CkArgMsg *m);
23
24 };
25
26 template <typename U> class SimpleArray : public CBase_SimpleArray<U> {
27
28  public:
29   
30   SimpleArray(CkMigrateMessage *m) {}
31
32   SimpleArray(){}
33
34   void done(){
35     CkPrintf("done int %d\n",localCopy.publicInt);
36     CkExit();
37   }
38
39   ~SimpleArray(){}
40
41   void acceptData(const HeapObject<U> &inData,
42           const std::vector<U> &dataToCompare){
43     
44     //do something to the object
45     localCopy=inData;
46
47     assert(inData.data.size() == dataToCompare.size());
48     for (int i = 0; i < dataToCompare.size(); i++)
49     {
50         assert(inData.data[i] == dataToCompare[i]);
51     }
52
53     localCopy.doWork();
54
55     if(this->thisIndex==0) //no one lower to pass to
56       {
57         done();
58       }
59     else
60       { // pass object down one index
61         this->thisProxy[this->thisIndex-1].acceptData(localCopy, dataToCompare);
62       }
63   }
64
65  private:
66
67   HeapObject<U> localCopy;
68
69 };
70
71 #define CK_TEMPLATES_ONLY
72 #include "SimplePUP.def.h"
73 #undef CK_TEMPLATES_ONLY