added a variable higherLevel and a method deliverer to be used to uniform the
[charm.git] / src / conv-com / router.h
1 #ifndef ROUTER_H
2 #define ROUTER_H
3
4 //Base class for routers
5 //Imported from Krishnan's Each To Many Communication Framework
6 //Modified to suit the new communication library
7 //Sameer Kumar 05/14/04
8
9 class Router 
10 {
11     int doneHandle;
12     
13  public:
14     Router() {};
15     virtual ~Router() {};
16     
17     //Insert messages for the all to all operation
18     //All processors will be multicast the same message here
19     virtual void EachToAllMulticast(comID id, int size, void *msg, 
20                                     int more) 
21         {CmiPrintf("Not impl\n");}
22     
23     //Insert messages for the all to all operation. The destination
24     //processors to which a message is multicast to be can be
25     //specified
26     //id = communication operation identifier
27     //size = size of the message
28     //msg = message to be sent
29     //numPes = number of processors the message has to be sent to
30     //pelist = list of relative proc ids the message has to be multicast to
31     //more = do I get more messages ?
32     virtual void EachToManyMulticast(comID id, int size, void *msg, 
33                                      int numPes, int *pelist, 
34                                      int more) 
35         {CmiPrintf("Not impl\n");}
36     
37     //The first iteration of message combining should call this
38     //entry function
39     virtual void RecvManyMsg(comID, char *) {CmiPrintf("Not Impl\n");}
40     
41     //The send and the rest of the iterations should call this
42     //entry function
43     virtual void ProcManyMsg(comID, char *) {CmiPrintf("Not Impl\n");}
44     
45     //Received a dummy
46     virtual void DummyEP(comID, int )   {CmiPrintf("Base Dummy\n");}
47     
48     //Set the map between processors and virtual processor id's
49     //Useful when only a subset of processors are involved in the
50     //communication operation
51     virtual void SetMap(int *) {;}
52
53     //Utility function
54     void SendDummyMsg(comID id, int pe, int magic) {
55         
56         ComlibPrintf("[%d] Send Dummy to %d\n", CkMyPe(), pe);
57
58         DummyMsg *m=(DummyMsg *)CmiAlloc(sizeof(DummyMsg));
59         CmiSetHandler(m, CkpvAccess(DummyHandle));
60         m->id=id;
61         m->magic=magic;
62         CmiSyncSendAndFree(pe, sizeof(DummyMsg),(char*) m);
63     }
64
65     void setDoneHandle(int handle) {
66         doneHandle = handle;
67     }
68
69     void Done(comID id) {
70
71         ComlibPrintf("Router Iteration Finished %d", CkMyPe());
72
73         if(doneHandle == 0)
74             return;
75
76         DummyMsg *m=(DummyMsg *)CmiAlloc(sizeof(DummyMsg));
77         m->id=id;
78         CmiSetHandler(m, doneHandle);
79         CmiSyncSendAndFree(CkMyPe(), sizeof(DummyMsg), (char*)m);
80     }
81 };
82
83 #endif