Merge branch 'charm' of charmgit:charm into charm
[charm.git] / src / conv-com / hypercuberouter.h
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7 /**
8    @addtogroup ConvComlibRouter
9    @{
10    @file 
11    @brief Dimensional Exchange (Hypercube) based routing strategy. 
12 */
13
14 #ifndef _HYPERCUBEROUTER_H
15 #define _HYPERCUBEROUTER_H
16 #include "petable.h"
17
18 /// Dimensional Exchange (Hypercube) based router
19 class HypercubeRouter : public Router
20 {
21  private:
22     PeTable *PeHcube, *PeHcube1;
23     int *buffer;
24     int* msgnum, InitCounter;
25     int *penum,*gpes;
26     int **next;
27     int Dim, stage, MyPe, NumPes, numDirectSteps, two_pow_ndirect;
28     int procMsgCount;
29     void InitVars();
30     void CreateStageTable(int, int *);
31     void LocalProcMsg(comID id);
32     void start_hcube(comID id);
33     
34  public:
35     
36     HypercubeRouter(int, int, Strategy*, int ndirect = 0);
37     ~HypercubeRouter();
38     void NumDeposits(comID, int);
39     void EachToAllMulticast(comID , int , void *, int);
40     void EachToManyMulticast(comID , int , void *, int, int *, int);
41     void EachToManyMulticastQ(comID id, CkQ<MessageHolder *> &msgq);
42     
43     void ProcMsg(int, msgstruct **) {;}
44     void RecvManyMsg(comID, char *);
45     void ProcManyMsg(comID, char *);
46     void DummyEP(comID id, int);
47     void SetMap(int *);
48     
49     //FIX this, some initialization done here
50     void SetID(comID id);
51 };
52 #endif
53
54 /*@}*/