Adding communication library in src/ck-com and src/conv-com
[charm.git] / src / ck-com / NodeMulticast.h
1 #ifndef NODE_MULTICAST
2 #define NODE_MULTICAST
3 #include "ComlibManager.h"
4
5 #if CMK_PERSISTENT_COMM
6 #include "persistent.h"
7 #endif
8
9 #define MAX_PES_PER_NODE 16
10 #define PROCESSOR_MODE 0
11 #define ARRAY_MODE 1
12
13 class NodeMulticast : public CharmStrategy {
14     CkQ <CharmMessageHolder*> *messageBuf;
15     int pes_per_node, *nodeMap, numNodes, myRank, numCurDestPes;
16     int mode; //Array destinations or processor destinations
17
18     CkArrayID mAid;
19     CkVec<CkArrayIndexMax> *indexVec;
20     int NodeMulticastHandlerId, entryPoint, nelements;
21     
22     int npes, *pelist, NodeMulticastCallbackHandlerId;
23     int validRank[MAX_PES_PER_NODE];
24     CkCallback cb;
25     long handler;
26
27 #if CMK_PERSISTENT_COMM
28     PersistentHandle *persistentHandlerArray;
29 #endif
30
31  public:
32     NodeMulticast(){}
33     void setDestinationArray(CkArrayID a, int nelem, 
34                              CkArrayIndexMax **idx, int ep);
35
36     //void setPeList(int npes, int *pelist, CkCallback callback);
37     //void setPeList(int npes, int *pelist, ComlibMulticastHandler handler);
38     
39     NodeMulticast(CkMigrateMessage *m) : CharmStrategy(m){}
40     void recvHandler(void *msg);
41     void insertMessage(CharmMessageHolder *msg);
42     void doneInserting();
43
44     CkCallback getCallback() { return cb;}
45     //ComlibMulticastHandler getHandler() { return (ComlibMulticastHandler)handler;}
46
47     virtual void pup(PUP::er &p);
48     PUPable_decl(NodeMulticast);
49 };
50 #endif