Adding a new handler which makes it easy for strategies to
[charm.git] / src / conv-com / convcomlibmanager.h
1 /* Converse ComlibManager 
2    Enables communication library strategies to be called from converse code.
3    Reused 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 #ifndef CONVCOMLIBMANAGER
12 #define CONVCOMLIBMANAGER
13
14 #include <converse.h>
15 #include "comlib.h"
16 #include <convcomlibstrategy.h>
17
18 #define MAX_NUM_STRATS 32
19
20 class ConvComlibManager {
21     
22     StrategyTable strategyTable;
23     CmiBool init_flag;
24
25  public:
26     int nstrats;
27
28     ConvComlibManager();
29     void setInitialized() {init_flag = CmiTrue;}
30     CmiBool getInitialized() {return init_flag;}
31     void insertStrategy(Strategy *s);
32     void insertStrategy(Strategy *s, int loc);
33     Strategy * getStrategy(int loc) {return strategyTable[loc].strategy;}
34     StrategyTable *getStrategyTable() {return &strategyTable;}
35 };
36
37
38 void initComlibManager();
39 Strategy *ConvComlibGetStrategy(int loc);
40 void ConvComlibRegisterStrategy(Strategy *s);
41 void ConvComlibScheduleDoneInserting(int loc);
42
43 CkpvDeclare(int, strategy_handlerid);
44
45 //Send a converse message to a remote strategy instance. On being
46 //received the handleMessage method will be invoked.
47 inline void ConvComlibSendMessage(int instance, int dest_pe, int size, char *msg) {
48     CmiSetHandler(msg, CkpvAccess(strategy_handlerid));
49     ((CmiMsgHeaderBasic *) msg)->stratid = instance;
50     
51     CmiSyncSendAndFree(dest_pe, size, msg);
52 }
53
54 #endif