fixed a bug in calling ckLocal for a local chare.
[charm.git] / src / ck-core / ck.h
index fe4905c974ecce60366f904355ae0405f32e94d2..c26fee2ebfe6a6e45a9e8342edd0ce5e72852338 100644 (file)
@@ -65,6 +65,10 @@ inline void _CldNodeEnqueue(int node, void *msg, int infofn) {
 #define _CldNodeEnqueue   CldNodeEnqueue
 #endif
 
+#ifndef CMK_CHARE_USE_PTR
+CkpvExtern(CkVec<void *>, chare_objs);
+#endif
+
 /// A set of "Virtual ChareID"'s
 class VidBlock {
     enum VidState {FILLED, UNFILLED};
@@ -103,6 +107,16 @@ class VidBlock {
           return actualID.objPtr;
       return NULL;
     }
+    void *getLocalChareObj(void) {   
+         // returns actual object, different when CMK_CHARE_USE_PTR is false
+      if (state==FILLED && actualID.onPE==CkMyPe()) 
+#ifdef CMK_CHARE_USE_PTR
+          return actualID.objPtr;
+#else
+          return CkpvAccess(chare_objs)[(CmiIntPtr)actualID.objPtr];
+#endif
+      return NULL;
+    }
     void pup(PUP::er &p) {
 #ifndef CMK_CHARE_USE_PTR
       int s;