Adding leanmd simplified as an example
[charm.git] / examples / charm++ / prio / pgm.C
1 #include "prio.decl.h"
2
3 /*readonly*/ CProxy_Main mainProxy;
4
5 struct TestMsg : public CMessage_TestMsg { };
6
7 struct Main : CBase_Main {
8   int numToSend;
9
10   Main(CkArgMsg* m)
11     : numToSend(30)
12   {
13     delete m;
14
15     mainProxy = thisProxy;
16
17     CProxy_Chare1 c1 = CProxy_Chare1::ckNew();
18
19     for (int i = 0; i < numToSend; i += 3) {
20       CkEntryOptions opts;
21       opts.setPriority(-1);
22       c1.prioMarshalling(10, &opts);
23
24       TestMsg* msg = new (8*sizeof(int)) TestMsg;
25       *(int*)CkPriorityPtr(msg) = -2;
26       CkSetQueueing(msg, CK_QUEUEING_IFIFO);
27       c1.prioMessage(msg);
28
29       c1.normalPrio(20);
30     }
31   }
32
33   void finished() {
34     if (--numToSend == 0) CkExit();
35   }
36 };
37
38 struct Chare1 : CBase_Chare1 {
39   Chare1() {
40     CkPrintf("Chare: created\n");
41   }
42   void prioMarshalling(int test) {
43     CkPrintf("prioMarshalling arrived\n");
44     mainProxy.finished();
45   }
46   void prioMessage(TestMsg* msg) {
47     CkPrintf("prioMessage arrived\n");
48     mainProxy.finished();
49     delete msg;
50   }
51   void normalPrio(int test2) {
52     CkPrintf("normalPrio arrived\n");
53     mainProxy.finished();
54   }
55 };
56
57 #include "prio.def.h"