charmxi: Add EP index lookup function via entry method function pointer
authorRamprasad Venkataraman <ramv@illinois.edu>
Tue, 3 Apr 2012 22:35:11 +0000 (17:35 -0500)
committerPhil Miller <mille121@illinois.edu>
Thu, 5 Apr 2012 21:18:02 +0000 (16:18 -0500)
This permits lookup without instantiating temporary variables just to feed the
CkIndex_Foo::doSomething() methods. This should also let us register template
entry methods when we encounter their instantiations in client ci files.

src/xlat-i/xi-symbol.C
tests/charm++/method_templates/pgm.C

index 1c37766f707ff4e8e747dac60393abaf5af6ad6e..396a21f59a933700e0b4245d6a0a3271a287f079 100644 (file)
@@ -4265,6 +4265,18 @@ void Entry::genIndexDecls(XStr& str)
       << "\n      return epidx;"
       << "\n    }\n";
 
+  if (!isConstructor()) {
+    str << templateSpecLine
+        << "\n    inline static int idx_" << name << "("
+        << retType
+        << " (" << container->baseName() << "::*)(";
+    if (param)
+      param->print(str);
+    str << ") ) {"
+        << "\n      return " << epIdx(0) << ";"
+        << "\n    }\n\n";
+  }
+
   // DMK - Accel Support - Also declare the function index for the Offload API call
   #if CMK_CELL != 0
     if (isAccel()) {
index 218beeb620de00ea935721ed8ddffaebf737478d..7a75675026e989665bc195e7367d25cea6bcdca2 100644 (file)
@@ -14,12 +14,12 @@ typedef count< std::less<libdtype> > cntType;
 void register_instantiations()
 {
     // Useless temporary variables just to feed the CkIndex functions
-    count< std::less<libdtype> >  comparator;
     avg avger;
     CkReduction::reducerType foo;
     CkCallback bar;
 
-    CkIndex_libArray::doSomething(comparator, foo, bar);
+    CkIndex_libArray::idx_doSomething< cntType > (
+        static_cast<void (libArray::*) (const cntType&, const CkReduction::reducerType&, const CkCallback&)>(NULL));
     CkIndex_libArray::doSomething(avger, foo, bar);
     CkReductionTarget(pgm, acceptResults<avg>);
     CkReductionTarget(pgm, acceptResults< cntType >);