Adding communication library in src/ck-com and src/conv-com
[charm.git] / src / ck-com / KDirectMulticastStrategy.h
1 #ifndef KDIRECT_MULTICAST_STRATEGY
2 #define KDIRECT_MULTICAST_STRATEGY
3
4 #include "DirectMulticastStrategy.h"
5
6 class KDirectHashObject{
7  public:
8     CkVec<CkArrayIndexMax> indices;
9     int npes;
10     int *pelist;
11 };
12
13
14 class KDirectMulticastStrategy: public DirectMultcastStrategy {
15  protected:
16     int kfactor;
17
18     //Initialize and cache information in a section id which can be
19     //used the next time the section is multicast to.
20     virtual void initSectionID(CkSectionID *sid);
21     
22     //Common Initializer for group and array constructors
23     //Every substrategy should implement its own
24     void commonKDirectInit();
25     
26     //Create a new multicast message with the array section in it
27     ComlibMulticastMsg * getNewMulticastMessage(CharmMessageHolder *cmsg);
28
29  public:
30     
31     //Group constructor
32     KDirectMulticastStrategy(int ndestpes = 0, int *destpelist = 0);    
33
34     //Array constructor
35     KDirectMulticastStrategy(CkArrayID aid);
36
37     KDirectMulticastStrategy(CkMigrateMessage *m): Strategy(m){}
38     
39     //    virtual void insertMessage(CharmMessageHolder *msg);
40     virtual void doneInserting();
41
42     //Called by the converse handler function
43     virtual void handleMulticastMessage(void *msg);
44     
45     //virtual void beginProcessing(int nelements);
46     
47     void setKFactor(int k){ kfactor = k; }
48     
49     virtual void pup(PUP::er &p);    
50     PUPable_decl(KDirectMulticastStrategy);
51 };
52
53 #endif