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

luis at geodynamics.org luis at geodynamics.org
Tue Dec 9 18:13:49 PST 2008


Author: luis
Date: 2008-12-09 18:13:49 -0800 (Tue, 09 Dec 2008)
New Revision: 13542

Modified:
   cs/cigma/trunk/src/Function.cpp
   cs/cigma/trunk/src/Function.h
Log:
Factory methods for Function class

Modified: cs/cigma/trunk/src/Function.cpp
===================================================================
--- cs/cigma/trunk/src/Function.cpp	2008-12-10 02:13:46 UTC (rev 13541)
+++ cs/cigma/trunk/src/Function.cpp	2008-12-10 02:13:49 UTC (rev 13542)
@@ -2,27 +2,46 @@
 #include "FunctionRegistry.h"
 #include "tri_logger.hpp"
 #include "fn_zero.h"
+#include "Field.h"
+#include "Exception.h"
+#include <string>
+#include <sstream>
+using namespace std;
 using namespace cigma;
 using boost::shared_ptr;
 
-shared_ptr<Function> Function::New(const char *source)
+shared_ptr<Function> Function::New(std::string fn_name)
 {
     TRI_LOG_STR("Function::New()");
-    TRI_LOG_STR(source);
+    TRI_LOG(fn_name);
+    FunctionInfo info;
+    info.fn_name = fn_name;
+    return Function::NewFunction(info);
+}
 
+shared_ptr<Function> Function::NewFunction(const FunctionInfo& fn_info)
+{
+    TRI_LOG_STR("Function::NewFunction()");
+
+    // XXX: if not found, try to instantiate Explicit, or load from shared library
+
     static FunctionRegistry registry;
-    shared_ptr<Function> tmp;
+    shared_ptr<Function> fn;
 
-    if (registry.hasFunction(source))
+    const char* source = fn_info.fn_name.c_str();
+    const bool fn_exists = registry.hasFunction(source);
+
+    if (fn_exists)
     {
-        tmp = registry.getFunction(source);
-        return tmp;
+        fn = registry.getFunction(source);
     }
+    else if (fn_info.field_info)
+    {
+        shared_ptr<Field> field = Field::NewField(fn_info.field_info);
+        fn = field;
+    }
 
-    // XXX: change char* to DataPath&
-    // XXX: if not found, try to instantiate Explicit, or load from shared library
-
-    return tmp;
+    return fn;
 }
 
 Function::Function()

Modified: cs/cigma/trunk/src/Function.h
===================================================================
--- cs/cigma/trunk/src/Function.h	2008-12-10 02:13:46 UTC (rev 13541)
+++ cs/cigma/trunk/src/Function.h	2008-12-10 02:13:49 UTC (rev 13542)
@@ -2,6 +2,7 @@
 #define __CIGMA_FUNCTION_H__
 
 #include <boost/shared_ptr.hpp>
+#include "core_args.h"
 
 namespace cigma
 {
@@ -18,7 +19,9 @@
     virtual int n_rank() const = 0;
     virtual bool eval(double *point, double *value) = 0;
 
-    static boost::shared_ptr<Function> New(const char* source);
+    /* static factory methods */
+    static boost::shared_ptr<Function> New(std::string fn_name);
+    static boost::shared_ptr<Function> NewFunction(const FunctionInfo& fn_info);
 };
 
 #endif



More information about the CIG-COMMITS mailing list