charmxi: Emit CProxyElement_Foo constructors that accept a base class CkArrayIndex...
authorRamprasad Venkataraman <ramv@illinois.edu>
Fri, 30 Mar 2012 23:45:30 +0000 (18:45 -0500)
committerRamprasad Venkataraman <ramv@illinois.edu>
Fri, 30 Mar 2012 23:47:43 +0000 (18:47 -0500)
This eases writing runtime code that needs to access an array element via a proxy.

src/xlat-i/xi-symbol.C

index 8d3f0098b881eac88d013c59044b55ad162ac72d..02724a0d16f47c3b14a7cd1ce4344508a876dd70 100644 (file)
@@ -1442,6 +1442,17 @@ Array::genSubDecls(XStr& str)
     str <<
          "    "<<ptype<<"(const CkArrayID &aid,const "<<indexType<<" &idx)\n"
          "        :";genProxyNames(str, "",NULL, "(aid,idx)", ", ");str<<" {}\n";
+    // Emit constructors that take the base class array index too.  This proves
+    // useful for runtime code that needs to access an element via a CkArrayIndex and
+    // an array proxy. This might compromise type safety a wee bit and is hence not
+    // propagated throughout.  For eg, CProxy_Foo::operator[] still accepts only the
+    // appropriate CkArrayIndexND.
+    str <<
+         "    "<<ptype<<"(const CkArrayID &aid,const CkArrayIndex &idx,CK_DELCTOR_PARAM)\n"
+         "        :";genProxyNames(str, "",NULL, "(aid,idx,CK_DELCTOR_ARGS)", ", ");str<<" {}\n";
+    str <<
+         "    "<<ptype<<"(const CkArrayID &aid,const CkArrayIndex &idx)\n"
+         "        :";genProxyNames(str, "",NULL, "(aid,idx)", ", ");str<<" {}\n";
   }
   else if (forElement==forAll)
   {/*Collective, indexible version*/