[cig-commits] r13897 - cs/cigma/trunk/src

luis at geodynamics.org luis at geodynamics.org
Wed Jan 21 11:37:45 PST 2009


Author: luis
Date: 2009-01-21 11:37:43 -0800 (Wed, 21 Jan 2009)
New Revision: 13897

Modified:
   cs/cigma/trunk/src/Function.cpp
   cs/cigma/trunk/src/FunctionRegistry.cpp
   cs/cigma/trunk/src/FunctionRegistry.h
Log:
Use a global variable for registering explicit functions.

Previously, we had a static variable in the Function::NewFunction()
factory method. We change this so that the 'cigma list' command
can have access to the list of function names.

Modified: cs/cigma/trunk/src/Function.cpp
===================================================================
--- cs/cigma/trunk/src/Function.cpp	2009-01-21 19:37:42 UTC (rev 13896)
+++ cs/cigma/trunk/src/Function.cpp	2009-01-21 19:37:43 UTC (rev 13897)
@@ -25,17 +25,16 @@
     TRI_LOG_STR("Function::NewFunction()");
     TRI_LOG(fn_info);
 
-    // XXX: if not found, try to instantiate Explicit, or load from shared library
 
-    static FunctionRegistry registry;
     shared_ptr<Function> fn;
 
     const char* source = fn_info.fn_name.c_str();
-    const bool fn_exists = registry.hasFunction(source);
 
+    const bool fn_exists = global_function_registry.hasFunction(source);
+
     if (fn_exists)
     {
-        fn = registry.getFunction(source);
+        fn = global_function_registry.getFunction(source);
     }
     else if (fn_info.field_info)
     {

Modified: cs/cigma/trunk/src/FunctionRegistry.cpp
===================================================================
--- cs/cigma/trunk/src/FunctionRegistry.cpp	2009-01-21 19:37:42 UTC (rev 13896)
+++ cs/cigma/trunk/src/FunctionRegistry.cpp	2009-01-21 19:37:43 UTC (rev 13897)
@@ -4,12 +4,17 @@
 #include "fn_one.h"
 #include "fn_test.h"
 #include "fn_disloc3d.h"
+#include <cassert>
+
+
 using namespace cigma;
-
-#include <cassert>
 using namespace std;
 using boost::shared_ptr;
 
+// Global registry
+FunctionRegistry global_function_registry;
+
+// Constructor
 FunctionRegistry::FunctionRegistry()
 {
     // 
@@ -32,6 +37,7 @@
     this->addFunction("bm.ssnog.displacement", disloc1);
 }
 
+// Destructor
 FunctionRegistry::~FunctionRegistry()
 {
     FunctionMap::iterator it;

Modified: cs/cigma/trunk/src/FunctionRegistry.h
===================================================================
--- cs/cigma/trunk/src/FunctionRegistry.h	2009-01-21 19:37:42 UTC (rev 13896)
+++ cs/cigma/trunk/src/FunctionRegistry.h	2009-01-21 19:37:43 UTC (rev 13897)
@@ -11,7 +11,7 @@
 }
 
 /**
- * Internal class for use in the Function::New() factory.
+ * Helper class for providing a scope for globally registered functions.
  */
 class cigma::FunctionRegistry
 {
@@ -28,4 +28,6 @@
     FunctionMap functions;
 };
 
+extern cigma::FunctionRegistry global_function_registry;
+
 #endif



More information about the CIG-COMMITS mailing list