Adding a persistent option to the DirectMulticastStrategy which will make it keep...
[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     int isPersistent; 
15     
16     //Array section support
17     CkHashtableT<ComlibSectionHashKey, ComlibSectionHashObject *> sec_ht; 
18     
19     //Add this section to the hash table locally
20     void insertSectionID(CkSectionID *sid);
21
22     //Called when a new section multicast is called by the user locally.
23     //The strategy should then create a topology for it and 
24     //return a hash object to store that topology
25     virtual ComlibSectionHashObject *createObjectOnSrcPe
26         (int nindices, CkArrayIndexMax *idx_list);
27    
28     //Similar to createHashObjectOnSrcPe, but that this call 
29     //is made on the destination or intermediate processor
30     virtual ComlibSectionHashObject *createObjectOnIntermediatePe
31         (int nindices, CkArrayIndexMax *idx_list, int srcpe);
32         
33     //Called to multicast the message to local array elements
34     void localMulticast(envelope *env, ComlibSectionHashObject *obj);
35     
36     //Called to send to message out to the remote destinations
37     //This method can be overridden to call converse level strategies 
38     virtual void remoteMulticast(envelope *env, ComlibSectionHashObject *obj);
39
40     //Process a new message by extracting the array elements 
41     //from it and creating a new hash object by calling createObjectOnIntermediatePe();
42     void handleNewMulticastMessage(envelope *env);
43
44  public:
45
46     DirectMulticastStrategy(CkMigrateMessage *m): CharmStrategy(m){}
47                 
48     //Array constructor
49     DirectMulticastStrategy(CkArrayID aid, int isPersistent = 0);
50         
51     //Destuctor
52     ~DirectMulticastStrategy();
53         
54     virtual void insertMessage(CharmMessageHolder *msg);
55     virtual void doneInserting();
56
57     //Called by the converse handler function
58     virtual void handleMessage(void *msg);    
59
60     virtual void pup(PUP::er &p);    
61     virtual void beginProcessing(int nelements);
62     
63     PUPable_decl(DirectMulticastStrategy);
64 };
65 #endif
66