Adding communication library in src/ck-com and src/conv-com
[charm.git] / src / conv-com / convcomlibmanager.C
1 /* Converse ComlibManager 
2    Enables communication library strategies to be called from converse code.
3    Also called by the Charm Comlibmanager.
4    
5    Stores a strategy table. Strategies can be inserted and accessed
6    from this table.
7
8    Sameer Kumar 28/03/04
9 */
10
11 #include "convcomlibmanager.h"
12 #include "routerstrategy.h"
13
14 int comm_debug;
15
16 CkpvDeclare(ConvComlibManager *, conv_comm_ptr);
17 CkpvDeclare(int, RecvdummyHandle);
18
19 ConvComlibManager::ConvComlibManager(): strategyTable(10){
20     nstrats = 0;
21 }
22
23 void ConvComlibManager::insertStrategy(Strategy *s) {
24     StrategyTableEntry &st = strategyTable[nstrats];
25     st.strategy = s;
26
27     s->setInstance(nstrats);
28     nstrats ++;
29 }
30
31
32 void ConvComlibManager::insertStrategy(Strategy *s, int loc) {
33
34     //For now allow insertion of any location    
35     StrategyTableEntry &st = strategyTable[loc];
36
37     st.strategy = s;
38 }
39
40 //handler for dummy messages
41 void recv_dummy(void *msg){
42     ComlibPrintf("Received Dummy %d\n", CmiMyPe());    
43     CmiFree(msg);
44 }
45
46
47 //An initialization routine which does prelimnary initialization of the 
48 //Converse commlib manager. Currently also initialized krishnans code
49 void initComlibManager(){ 
50     ConvComlibManager *conv_com = new ConvComlibManager();
51     
52     CkpvInitialize(ConvComlibManager *, conv_comm_ptr);
53     CkpvAccess(conv_comm_ptr) = conv_com;
54
55     //comm_debug = 1;
56     ComlibPrintf("Init Call\n");
57
58     CkpvInitialize(int, RecvmsgHandle);
59     CkpvInitialize(int, RecvCombinedShortMsgHdlrIdx);
60     
61     CkpvInitialize(int, RecvdummyHandle);
62     CkpvAccess(RecvdummyHandle) = CkRegisterHandler((CmiHandler)recv_dummy);
63
64     PUPable_reg(Strategy);
65     PUPable_reg(RouterStrategy);
66     PUPable_reg(MessageHolder);
67 }
68  
69 Strategy *ConvComlibGetStrategy(int loc) {
70     //Calling converse strategy lets Charm++ strategies one strategy
71     //table entry but multiple layers of strategies (Charm on top of Converse).
72     return (CkpvAccess(conv_comm_ptr))->getStrategy(loc)->getConverseStrategy();
73 }
74
75 void ConvComlibRegisterStrategy(Strategy *s) {
76     (CkpvAccess(conv_comm_ptr))->insertStrategy(s);
77 }