Fixed a few incorrect code in the example
[charm.git] / tests / charm++ / chkpt / hello.C
1 #include <stdio.h>
2 #include "hello.decl.h"
3
4 CProxy_Main mainProxy;
5 CProxy_Hello helloProxy;
6 int nElements;
7
8 class Main : public CBase_Main {
9   int step;
10   int a;
11   int b[2];
12 public:
13   Main(CkArgMsg* m){
14     step=0;     
15     a=123;b[0]=456;b[1]=789;
16     nElements=8;
17     delete m;
18
19     CkPrintf("Running Hello on %d processors for %d elements\n",CkNumPes(),nElements);
20     mainProxy = thisProxy;
21     helloProxy = CProxy_Hello::ckNew(nElements);
22     helloProxy.SayHi();
23   }
24   
25   Main(CkMigrateMessage *m) : CBase_Main(m) { 
26     mainProxy = thisProxy;
27     a=987;b[0]=654;b[1]=321;
28     CkPrintf("Main's MigCtor. a=%d(%p), b[0]=%d(%p), b[1]=%d.\n",a,&a,b[0],b,b[1]);
29   }
30
31   void myClient(CkReductionMsg *m){
32     step++;
33     int stepInc = *((int *)m->getData());
34     CkAssert(step == stepInc);
35     CkPrintf("myClient. a=%d(%p), b[0]=%d(%p), b[1]=%d.\n",a,&a,b[0],b,b[1]);
36     if(step == 3){
37       CkCallback cb(CkIndex_Hello::SayHi(),helloProxy);
38       CkStartCheckpoint("log",cb);
39     }else{
40       helloProxy.SayHi();
41     }
42     delete m;
43   }
44
45   void pup(PUP::er &p){
46     CBase_Main::pup(p);
47     p|step;
48     p|a; p(b,2);
49     CkPrintf("Main's PUPer. a=%d(%p), b[0]=%d(%p), b[1]=%d.\n",a,&a,b[0],b,b[1]);
50   }
51 };
52
53 class Hello : public CBase_Hello
54 {
55   int step;
56 public:
57   Hello(){ step = 0; }
58   Hello(CkMigrateMessage *m) : CBase_Hello(m) {}
59   
60   void SayHi(){
61     step++;
62     if(step < 10){
63       CkCallback cb(CkIndex_Main::myClient(0),mainProxy);
64       contribute(sizeof(int),(void*)&step,CkReduction::max_int,cb);
65     }else{
66       contribute(sizeof(int),(void*)&step,CkReduction::max_int,CkCallback(CkCallback::ckExit));
67     }
68   }
69   
70   void pup(PUP::er &p){
71     CBase_Hello::pup(p);
72     p|step;
73   }
74 };
75
76 #include "hello.def.h"
77