docs and hello: change inheritance from Chare to CBase_
[charm.git] / examples / charm++ / hello / stl_array / hello.C
1 #include <stdio.h>
2
3 #include <vector>
4 #include <list>
5 #include <string>
6 #include "pup_stl.h"
7 typedef std::map<int,std::string> foo;
8 typedef std::pair<int,std::string> fooPair;
9
10 #include "hello.decl.h"
11
12 /*readonly*/ CProxy_Main mainProxy;
13 /*readonly*/ int nElements;
14
15 /*mainchare*/
16 class Main : public CBase_Main
17 {
18 public:
19   Main(CkArgMsg* m)
20   {
21         for (int i=0;i<m->argc;i++)
22                 CkPrintf("argv[%d]='%s'\n",i,m->argv[i]);
23     //Process command-line arguments
24     nElements=5;
25     if(m->argc >1 ) nElements=atoi(m->argv[1]);
26     delete m;
27
28     //Start the computation
29     CkPrintf("Running Hello on %d processors for %d elements\n",
30              CkNumPes(),nElements);
31     mainProxy = thisProxy;
32
33     CProxy_Hello arr = CProxy_Hello::ckNew(nElements);
34
35     foo f;
36     f.insert(fooPair(2,"first, 2"));
37     f.insert(fooPair(3,"second, 3"));
38     f.insert(fooPair(1,"third, 1"));
39     f.insert(fooPair(5,"fourth, 5"));
40     arr[0].SayHi(17,f);
41   };
42
43   void done(void)
44   {
45     CkPrintf("All done\n");
46     CkExit();
47   };
48 };
49
50 /*array [1D]*/
51 class Hello : public CBase_Hello 
52 {
53 public:
54   Hello()
55   {
56     CkPrintf("Hello %d created\n",thisIndex);
57   }
58
59   Hello(CkMigrateMessage *m) {}
60   
61   void SayHi(int hiNo,const foo &f)
62   {
63     int i=0;
64     for (foo::const_iterator it=f.begin();it!=f.end();++it)
65       CkPrintf("f[%d]=(%d,'%s')\n",i++,it->first,it->second.c_str());
66     CkPrintf("Hi[%d] from element %d\n",hiNo,thisIndex);
67     if (thisIndex < nElements-1)
68       //Pass the hello on:
69       thisProxy[thisIndex+1].SayHi(hiNo+1,f);
70     else 
71       //We've been around once-- we're done.
72       mainProxy.done();
73   }
74 };
75
76 #include "hello.def.h"