Adding communication library in src/ck-com and src/conv-com
[charm.git] / src / conv-com / routerstrategy.h
1
2 /* Class that calls Krishnan's routers from the new Comlib.
3    Developed to be called from Converse
4    Sameer Kumar 05/14/04
5 */
6    
7
8 #ifndef ROUTER_STRATEGY
9 #define ROUTER_STRATEGY
10
11 #include "convcomlibmanager.h"
12
13 #include "gridrouter.h"
14 #include "graphrouter.h"
15 #include "de.h"
16 #include "treerouter.h"
17 #include "3dgridrouter.h"
18
19 class RouterStrategy : public Strategy {
20
21     Router * router;
22     CkQ<MessageHolder *> msgQ;
23     CkQ<char *> recvQ, procQ;
24     CkQ<DummyMsg *> dummyQ;
25
26     comID id;
27     int *pelist;
28     int npes;
29     int *procMap;
30     int myPe;
31     int routerID;
32
33     int doneHandle;    //Array strategy done handle
34     int myDoneHandle;   //my own done handle, which will inturn call
35                        //array strategy done handle
36  
37    int doneFlag, bufferedDoneInserting;
38
39     void setReverseMap();
40
41  public:
42     //constructor
43     //stratid = which topology to use ? (Mesh?, Grid?, Hypercube ?)
44     //npes = number of processors in the all to all operation
45     //pelist = list of processors
46     RouterStrategy(int stratid, int handle, int npes, int *pelist);
47     RouterStrategy(CkMigrateMessage *m): Strategy(m){}
48
49     //Insert messages
50     void insertMessage(MessageHolder *msg);
51     //Finished inserting
52     void doneInserting();
53
54     //Call Krishnan's router functions
55     void RecvManyMsg(char *msg);
56     void ProcManyMsg(char *msg);
57     void DummyEP(DummyMsg *m);
58     
59     void Done(DummyMsg *m);
60
61     int * getProcMap() {return procMap;}
62
63     virtual void pup(PUP::er &p);
64     PUPable_decl(RouterStrategy);
65 };
66 #endif