*** empty log message ***
[charm.git] / src / conv-com / convcomlibstrategy.C
1
2 #include <converse.h>
3 #include "convcomlibstrategy.h"
4
5 //Class that defines the entry methods that a strategy must define.
6 //To write a new strategy inherit from this class and define the
7 //virtual methods.  Every strategy can also define its own constructor
8 //and have any number of arguments. Also call the parent class methods
9 //in those methods. The strategies defined here can only be used in
10 //converse. For Charm++ strategies please see ck-core/ComlibStraetgy.h
11
12 Strategy::Strategy() : PUP::able() {
13     myInstanceID = 0;
14     type = CONVERSE_STRATEGY;
15     converseStrategy = this;
16     isStrategyBracketed = 0;
17 };
18
19 //Each strategy must define his own Pup interface.
20 void Strategy::pup(PUP::er &p){ 
21
22     PUP::able::pup(p);
23
24     p | isStrategyBracketed;
25     p | type;
26 }
27
28
29 //Message holder functions. Message holder is a wrapper around a
30 //message. Has other useful data like destination processor list for a
31 //multicast etc.
32
33 MessageHolder::MessageHolder(char * msg, int proc, int sz) : PUP::able() {
34     data = msg;
35     dest_proc = proc;
36     size = sz;
37     
38     isDummy = 0;
39
40     npes = 0;
41     pelist = 0;
42 }
43
44 MessageHolder::~MessageHolder() {
45     /*
46       if(pelist != NULL && npes > 0)
47       delete[] pelist;
48     */
49 }
50
51 char * MessageHolder::getMessage(){
52     return data;
53 }
54
55 void MessageHolder::pup(PUP::er &p) {
56     PUP::able::pup(p);
57
58     p | dest_proc;
59     p | isDummy;
60     p | size;
61     p | npes;    
62
63     if(p.isUnpacking()) {
64         data = (char *)CmiAlloc(size);
65         
66         if(npes >0)
67             pelist = new int[npes];
68     }
69
70     p(data, size);
71     if(npes > 0)
72         p(pelist, npes);    
73     else
74         pelist = 0;
75 }
76
77 void StrategyWrapper::pup (PUP::er &p) {
78
79     //CkPrintf("In PUP of StrategyWrapper\n");
80
81     p | nstrats;
82     if(p.isUnpacking())
83         s_table = new Strategy * [nstrats];
84     
85     for(int count = 0; count < nstrats; count ++)
86         p | s_table[count];
87 }
88
89
90 StrategyTableEntry::StrategyTableEntry() {
91     strategy = NULL;
92     
93     numElements = 0;   //used by the array listener, 
94                        //could also be used for other objects
95     elementCount = 0;  //Count of how many elements have deposited
96                        //their data
97     nEndItr = 0;       //#elements that called end iteration
98     call_doneInserting = 0;
99 }
100
101
102 PUPable_def(Strategy);
103 PUPable_def(MessageHolder);