00001
00008 #ifndef _HYPERCUBEROUTER_H
00009 #define _HYPERCUBEROUTER_H
00010 #include "petable.h"
00011
00013 class HypercubeRouter : public Router
00014 {
00015 private:
00016 PeTable *PeHcube, *PeHcube1;
00017 int *buffer;
00018 int* msgnum, InitCounter;
00019 int *penum,*gpes;
00020 int **next;
00021 int Dim, stage, MyPe, NumPes, numDirectSteps, two_pow_ndirect;
00022 int procMsgCount;
00023 void InitVars();
00024 void CreateStageTable(int, int *);
00025 void LocalProcMsg(comID id);
00026 void start_hcube(comID id);
00027
00028 public:
00029
00030 HypercubeRouter(int, int, Strategy*, int ndirect = 0);
00031 ~HypercubeRouter();
00032 void NumDeposits(comID, int);
00033 void EachToAllMulticast(comID , int , void *, int);
00034 void EachToManyMulticast(comID , int , void *, int, int *, int);
00035 void EachToManyMulticastQ(comID id, CkQ<MessageHolder *> &msgq);
00036
00037 void ProcMsg(int, msgstruct **) {;}
00038 void RecvManyMsg(comID, char *);
00039 void ProcManyMsg(comID, char *);
00040 void DummyEP(comID id, int);
00041 void SetMap(int *);
00042
00043
00044 void SetID(comID id);
00045 };
00046 #endif
00047