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