added a variable higherLevel and a method deliverer to be used to uniform the
[charm.git] / src / conv-com / graphrouter.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7
8 #ifndef _GRAPHROUTER_H
9 #define _GRAPHROUTER_H
10
11 #include <math.h>
12 #include <converse.h>
13 #include "comlib.h"
14 #include "petable.h"
15
16 #include "persistent.h"
17
18 class TopologyDescriptor {
19  public:
20     //TopologyDescriptor(int npes, int mype)=0;
21     //Entry methods which will define the specific graph.
22     virtual void getNeighbors(int &npes, int *pelist) = 0;
23     virtual int getNumStages() = 0;
24     virtual int getNumSteps(int stage) = 0;
25     virtual void getPesToSend(int step, int stage, int &npesToSend, 
26                               int *pelist, int &nextpe) = 0;
27     virtual int getNumMessagesExpected(int stage) = 0;
28 };
29
30 //A generalized virtual topology based router. To make it a specific
31 //router a new topology class needs to br created and passed to this.
32 class GraphRouter : public Router
33 {
34     PeTable *PeGraph;
35     TopologyDescriptor *tp;
36     
37     int *pesToSend, *gpes;
38     int numNeighbors, *neighborPeList, nstages;
39     
40     int MyPe, NumPes, currentIteration;
41     int *recvExpected, *recvCount;
42     int curStage, *stageComplete;
43
44     void sendMessages(comID id, int stage);
45     void init(int numPes, int myPe, TopologyDescriptor *tp);
46     
47 #if CMK_PERSISTENT_COMM
48     PersistentHandle *handlerArrayOdd, *handlerArrayEven;
49 #endif          
50     
51  public:
52     GraphRouter(int numPes, int myPe);
53     //GraphRouter(int numPes, int myPe, int topid);
54     ~GraphRouter();
55   
56     //Router enrty methods overridden here.
57
58     void NumDeposits(comID, int);
59     void EachToAllMulticast(comID , int , void *, int);
60     void EachToManyMulticast(comID , int , void *, int, int *, int);
61     void RecvManyMsg(comID, char *);
62     void ProcManyMsg(comID, char *);
63     void DummyEP(comID id, int);
64     
65     void SetMap(int *);
66 };
67
68 #endif