New version of communication library with learning capabilities. Learning and dynamic...
[charm.git] / src / ck-com / ComlibArrayListener.h
1 #ifndef COMMLIBARRAYLISTENER_H
2 #define COMMLIBARRAYLISTENER_H
3
4 #include "ComlibStrategy.h"
5 #include "ckhashtable.h"
6
7 class ComlibArrayListener : public CkArrayListener{
8     int nElements;
9     CkArrayID thisArrayID;
10     CkVec <StrategyTableEntry *> strategyList;
11     CkHashtableT<CkArrayIndexMax, CkArrayIndexMax*> *ht;
12     
13     int isRegistered(ArrayElement *elt, CharmStrategy *astrat);
14     void addElement(ArrayElement *elt, CmiBool mogration_flag);
15     void deleteElement(ArrayElement *elt, CmiBool migration_flag);
16     
17  public:
18     ComlibArrayListener();
19     ComlibArrayListener(CkMigrateMessage *);
20
21     void ckElementCreating(ArrayElement *elt);
22     void ckElementDied(ArrayElement *elt);
23     
24     void ckElementLeaving(ArrayElement *elt);
25     CmiBool ckElementArriving(ArrayElement *elt);
26     
27     //Add strategy to listening list, strategy will get an the number
28     //of array elements lying on that processor
29     void registerStrategy(StrategyTableEntry *);
30
31     //remove strategy from table, and now it will not get updates
32     //about this array
33     void unregisterStrategy(StrategyTableEntry *entry) {
34         for(int count = 0; count < strategyList.size(); count++)
35             if(strategyList[count] == entry)
36                 strategyList.remove(count);
37     }
38
39     void getLocalIndices(CkVec<CkArrayIndexMax> &vec);
40
41     void pup(PUP::er &p);
42     PUPable_decl(ComlibArrayListener);
43 };
44
45 #endif