bugfix
[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     higherLevel = this;
17     isStrategyBracketed = 0;
18     destinationHandler = 0;
19 };
20
21 //Each strategy must define his own Pup interface.
22 void Strategy::pup(PUP::er &p){ 
23     
24     //PUP::able::pup(p);
25
26     p | isStrategyBracketed;
27     p | type;
28     p | destinationHandler;
29
30     if (p.isUnpacking()) {
31       converseStrategy = this;
32       higherLevel = this;
33     }
34 }
35
36 //Message holder functions. Message holder is a wrapper around a
37 //message. Has other useful data like destination processor list for a
38 //multicast etc.
39
40 void MessageHolder::pup(PUP::er &p) {
41     //PUP::able::pup(p);
42
43     p | dest_proc;
44     p | isDummy;
45     p | size;
46     p | npes;    
47
48     if(p.isUnpacking()) {
49         data = (char *)CmiAlloc(size);
50         
51         if(npes >0)
52             pelist = new int[npes];
53     }
54
55     p(data, size);
56     if(npes > 0)
57         p(pelist, npes);    
58     else
59         pelist = 0;
60 }
61
62 void StrategyWrapper::pup (PUP::er &p) {
63
64     //CkPrintf("In PUP of StrategyWrapper\n");
65
66     p | nstrats;
67     if(p.isUnpacking())
68         s_table = new Strategy * [nstrats];
69     
70     for(int count = 0; count < nstrats; count ++)
71         p | s_table[count];
72 }
73
74
75 StrategyTableEntry::StrategyTableEntry() {
76     strategy = NULL;
77     
78     numElements = 0;   //used by the array listener, 
79                        //could also be used for other objects
80     elementCount = 0;  //Count of how many elements have deposited
81                        //their data
82     nEndItr = 0;       //#elements that called end iteration
83     call_doneInserting = 0;
84 }
85
86
87 PUPable_def(Strategy);
88 PUPable_def(MessageHolder);