a6ada90e0e4c002196c5775eed1dd2220afe26c4
[charm.git] / src / ck-com / EachToManyMulticastStrategy.h
1 #ifndef EACH_TO_MANY_MULTICAST_STRATEGY
2 #define EACH_TO_MANY_MULTICAST_STRATEGY
3
4 #include "ComlibManager.h"
5 #include "DirectMulticastStrategy.h"
6 #include "routerstrategy.h"
7
8 class EachToManyMulticastStrategy: public CharmStrategy {
9  protected:
10     //CkQ <CharmMessageHolder*> *messageBuf;
11     int routerID;      //Which topology
12     //comID comid;
13     
14     int npes, *pelist; //Domain of the topology
15     int MyPe;          //My id in that domain
16
17     int ndestpes, *destpelist, *destMap; //Destination processors
18
19     int handlerId;
20     
21     //CkVec<CkArrayIndexMax> localDestIndices;
22     
23     //Dynamically set by the application
24     CkHashtableT<ComlibSectionHashKey, void *> sec_ht;
25
26     //void localMulticast(CkVec<CkArrayIndexMax> *vec, envelope *env);
27     
28     ComlibMulticastMsg *getPackedMulticastMessage(CharmMessageHolder *cmsg);
29     //void setReverseMap();    
30     
31     //Executes common code just after array and group constructors
32     virtual void commonInit();
33     virtual void initSectionID(CkSectionID *sid);
34
35     int MaxSectionID;
36
37     RouterStrategy *rstrat;
38
39  public:
40     //Group constructor
41     EachToManyMulticastStrategy(int strategyId, int nsrcpes=0, 
42                                 int *srcpelist=0, 
43                                 int ndestpes =0, int *destpelist =0);
44     
45     //Array constructor
46     EachToManyMulticastStrategy(int substrategy, CkArrayID src, 
47                                 CkArrayID dest, int nsrc=0, 
48                                 CkArrayIndexMax *srcelements=0, int ndest=0, 
49                                 CkArrayIndexMax *destelements=0);
50     
51     EachToManyMulticastStrategy(CkMigrateMessage *m) : CharmStrategy(m){}
52
53     //Basic function, subclasses should not have to change it
54     virtual void insertMessage(CharmMessageHolder *msg);
55     //More specielized function
56     virtual void doneInserting();
57
58     virtual void pup(PUP::er &p);    
59     virtual void beginProcessing(int nelements);
60     virtual void localMulticast(void *msg);
61     
62     //virtual void setDestArray(CkArrayID dest) {destArrayID=dest;}
63     
64     ComlibMulticastMsg *getNewMulticastMessage(CharmMessageHolder *m);
65
66     PUPable_decl(EachToManyMulticastStrategy);
67
68 };
69 #endif
70