[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