charmxi: move function definition out of header and smash some one-liner methods
authorPhil Miller <mille121@illinois.edu>
Sun, 30 Sep 2012 19:03:13 +0000 (14:03 -0500)
committerPhil Miller <mille121@illinois.edu>
Sun, 30 Sep 2012 20:20:56 +0000 (15:20 -0500)
src/xlat-i/sdag/CParsedFile.C
src/xlat-i/sdag/CParsedFile.h

index 0b36488384e18d30907f2eee2b2a445af4f5f100..2c76a18d8e8d044f110b9096803951490f675581 100644 (file)
@@ -1,8 +1,10 @@
+#include <algorithm>
 #include "CParsedFile.h"
 
+using std::for_each;
+
 namespace xi {
 
-///////////////////////////// CPARSEDFILE //////////////////////
 /*void CParsedFile::print(int indent)
 {
   for(CEntry *ce=entryList.begin(); !entryList.end(); ce=entryList.next())
@@ -19,29 +21,55 @@ namespace xi {
 */
 XStr *CParsedFile::className = NULL;
 
-void CParsedFile::numberNodes(void)
-{
-  for(std::list<Entry*>::iterator cn = nodeList.begin(); cn != nodeList.end(); ++cn) {
-    if ((*cn)->sdagCon != 0) {
-      (*cn)->sdagCon->numberNodes();
-    }
-  }
-}
+  template <typename T>
+  struct SdagConCall {
+    void (SdagConstruct::*fn)(T);
+    T arg;
 
-void CParsedFile::labelNodes(void)
-{
-  for(std::list<Entry*>::iterator cn = nodeList.begin(); cn != nodeList.end(); ++cn) {
-    if ((*cn)->sdagCon != 0) {
-      (*cn)->sdagCon->labelNodes();
+    SdagConCall(void (SdagConstruct::*fn_)(T), const T& arg_) : fn(fn_), arg(arg_) { }
+    void operator()(Entry *e) {
+      if (e->sdagCon) {
+        (e->sdagCon->*fn)(arg);
+      }
     }
-  }
-}
-
-void CParsedFile::propagateState(void)
-{
-  for(std::list<Entry*>::iterator cn = nodeList.begin(); cn != nodeList.end(); ++cn) {
-    (*cn)->sdagCon->propagateState(0);
-  }
+  };
+
+  template <>
+  struct SdagConCall<void> {
+    void (SdagConstruct::*fn)();
+    SdagConCall(void (SdagConstruct::*fn_)()) : fn(fn_) { }
+    void operator()(Entry *e) {
+      if (e->sdagCon) {
+        (e->sdagCon->*fn)();
+      }
+    }
+  };
+
+void CParsedFile::doProcess(XStr& classname, XStr& decls, XStr& defs) {
+  className = &classname;
+  decls << "#define " << classname << "_SDAG_CODE \n";
+
+  for_each(nodeList.begin(), nodeList.end(), SdagConCall<void>(&SdagConstruct::numberNodes));
+  for_each(nodeList.begin(), nodeList.end(), SdagConCall<void>(&SdagConstruct::labelNodes));
+  for_each(nodeList.begin(), nodeList.end(), SdagConCall<int>(&SdagConstruct::propagateState, 0));
+  generateConnectEntryList();
+  generateTrace();
+  generateEntryList();
+  mapCEntry();
+
+  generateCode(decls, defs);
+  generateEntries(decls, defs);
+  generateInitFunction(decls, defs);
+  generatePupFunction(decls);
+  generateRegisterEp(decls, defs);
+  generateTraceEp(decls, defs);
+
+#ifdef USE_CRITICAL_PATH_HEADER_ARRAY
+  generateDependencyMergePoints(decls); // for Isaac's Critical Path Detection
+#endif
+
+  decls.line_append_padding('\\');
+  decls << "\n";
 }
 
 void CParsedFile::mapCEntry(void)
index c975498f9db7a7b8b1eecdd51f984e17da667d3f..28d2b50c4f1cf657364e56ef89d1872248ac7d03 100644 (file)
@@ -12,14 +12,9 @@ namespace xi {
 class Chare;
 class Entry;
 
-
-/******************* CParsedFile ***********************/
 class CParsedFile {
   private:
-    void numberNodes(void);
-    void labelNodes(void);
     void mapCEntry();                  // search and check if all functions in when() are defined.
-    void propagateState(void);
     void generateConnectEntryList(void);
     void generateEntryList(void);       // collect and setup CEntry list for When and If
     void generateCode(XStr& decls, XStr& defs);
@@ -42,32 +37,7 @@ class CParsedFile {
     ~CParsedFile(void){}
     void print(int indent);
     void addNode(Entry *e) { nodeList.push_back(e); }
-    void doProcess(XStr& classname, XStr& decls, XStr& defs) {
-      className = &classname;
-      decls << "#define " << classname << "_SDAG_CODE \n";
-
-      numberNodes();
-      labelNodes();
-      propagateState();
-      generateConnectEntryList();
-      generateTrace();
-      generateEntryList();
-      mapCEntry();
-      generateCode(decls, defs);
-      generateEntries(decls, defs);
-      generateInitFunction(decls, defs);
-      generatePupFunction(decls);
-      generateRegisterEp(decls, defs);
-      generateTraceEp(decls, defs);
-
-#ifdef USE_CRITICAL_PATH_HEADER_ARRAY
-      generateDependencyMergePoints(decls); // for Isaac's Critical Path Detection
-#endif
-
-      decls.line_append_padding('\\');
-      decls << "\n";
-    }
-
+    void doProcess(XStr& classname, XStr& decls, XStr& defs);
 };
 
 }