added a callback functionality at the end of an iteration
authorFilippo Gioachin <gioachin@illinois.edu>
Thu, 14 Apr 2005 00:18:55 +0000 (00:18 +0000)
committerFilippo Gioachin <gioachin@illinois.edu>
Thu, 14 Apr 2005 00:18:55 +0000 (00:18 +0000)
src/ck-com/ComlibStrategy.C
src/ck-com/ComlibStrategy.h
src/ck-com/EachToManyMulticastStrategy.C

index 6373814dad83318e86b60006f456666836b16d36..bd6d2e991f4ad282cf6c5512705d3f6c0bbcfd7a 100644 (file)
@@ -24,6 +24,7 @@ void CharmStrategy::pup(PUP::er &p) {
     p | ainfo;
     p | forwardOnMigration;
     p | mflag;
+    p | onFinish;
 }
 
 CharmMessageHolder::CharmMessageHolder(char * msg, int proc) 
index 8aea3dc18b2fd089223fa7daa6c3454f13a15f0f..1c43478dff1fef7662cf3eab927cab2d47c347ab 100644 (file)
@@ -192,6 +192,7 @@ class CharmStrategy : public Strategy {
     int forwardOnMigration;
     ComlibLearner *learner;
     CmiBool mflag;    //Does this strategy handle point-to-point or 
+    CkCallback onFinish;
 
  public:
     ComlibGroupInfo ginfo;
@@ -222,6 +223,14 @@ class CharmStrategy : public Strategy {
         return mflag;
     }
 
+    inline void setOnFinish (CkCallback of) {
+      onFinish = of;
+    }
+
+    inline CkCallback getOnFinish () {
+      return onFinish;
+    }
+
     //Called for each message
     //Function inserts a Charm++ message
     virtual void insertMessage(CharmMessageHolder *msg) {
index edff886b77d2dc8b5ec36eb8212733a576eff9da..61b6aa260b87006b23e3ecbbf2bea09a69cef74b 100644 (file)
@@ -45,8 +45,11 @@ void *itrDoneHandler(void *msg){
         ComlibPrintf("[%d] Calling Dummy Done Inserting, %d, %d\n", CkMyPe(), instid, nexpected);
         nm_mgr = (EachToManyMulticastStrategy *)sentry->strategy;    
         nm_mgr->doneInserting();
-    }
+       
+       if (!nm_mgr->getOnFinish().isInvalid()) nm_mgr->getOnFinish().send(0);
     
+    }
+
     return NULL;
 }