Changing CharmStrategy and DirectMulticastStrategy to use the strategy_handler
[charm.git] / src / ck-com / DirectMulticastStrategy.h
1 #ifndef DIRECT_MULTICAST_STRATEGY
2 #define DIRECT_MULTICAST_STRATEGY
3
4 #include "ComlibManager.h"
5 #include "ComlibSectionInfo.h"
6
7 void *DMHandler(void *msg);
8
9 class DirectMulticastStrategy: public CharmStrategy {
10  protected:
11     //   int handlerId;    
12     ComlibSectionInfo sinfo;
13     
14     //Array section support
15     CkHashtableT<ComlibSectionHashKey, ComlibSectionHashObject *> sec_ht; 
16     
17     //Add this section to the hash table locally
18     void insertSectionID(CkSectionID *sid);
19
20     //Called when a new section multicast is called by the user locally.
21     //The strategy should then create a topology for it and 
22     //return a hash object to store that topology
23     virtual ComlibSectionHashObject *createObjectOnSrcPe
24         (int nindices, CkArrayIndexMax *idx_list);
25    
26     //Similar to createHashObjectOnSrcPe, but that this call 
27     //is made on the destination or intermediate processor
28     virtual ComlibSectionHashObject *createObjectOnIntermediatePe
29         (int nindices, CkArrayIndexMax *idx_list, int srcpe);
30         
31     //Called to multicast the message to local array elements
32     void localMulticast(envelope *env, ComlibSectionHashObject *obj);
33     
34     //Called to send to message out to the remote destinations
35     //This method can be overridden to call converse level strategies 
36     virtual void remoteMulticast(envelope *env, ComlibSectionHashObject *obj);
37
38     //Process a new message by extracting the array elements 
39     //from it and creating a new hash object by calling createObjectOnIntermediatePe();
40     void handleNewMulticastMessage(envelope *env);
41
42  public:
43
44     DirectMulticastStrategy(CkMigrateMessage *m): CharmStrategy(m){}
45                 
46     //Array constructor
47     DirectMulticastStrategy(CkArrayID aid);
48         
49     //Destuctor
50     ~DirectMulticastStrategy();
51         
52     virtual void insertMessage(CharmMessageHolder *msg);
53     virtual void doneInserting();
54
55     //Called by the converse handler function
56     virtual void handleMessage(void *msg);    
57
58     virtual void pup(PUP::er &p);    
59     virtual void beginProcessing(int nelements);
60     
61     PUPable_decl(DirectMulticastStrategy);
62 };
63 #endif
64