summaryrefslogtreecommitdiff
path: root/src/builtin.cc
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2011-11-06 17:37:12 (GMT)
committerMarius Kintel <marius@kintel.net>2011-11-06 17:37:12 (GMT)
commit45161d4356060e0a974b072c53349569332b6a74 (patch)
tree3681aede71d35912bc56738ae22ef2f28211e9f7 /src/builtin.cc
parent970c6c1c6e4a7860170aee4ef2239fae7fcd9934 (diff)
Slight refactoring of builtin function and module handling
Diffstat (limited to 'src/builtin.cc')
-rw-r--r--src/builtin.cc86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/builtin.cc b/src/builtin.cc
new file mode 100644
index 0000000..6eb32b6
--- /dev/null
+++ b/src/builtin.cc
@@ -0,0 +1,86 @@
+#include "builtin.h"
+#include "function.h"
+#include "module.h"
+#include <boost/foreach.hpp>
+
+Builtins *Builtins::instance(bool erase)
+{
+ static Builtins *s_builtins = new Builtins;
+ if (erase) {
+ delete s_builtins;
+ s_builtins = NULL;
+ }
+ return s_builtins;
+}
+
+void Builtins::init(const char *name, class AbstractModule *module)
+{
+ Builtins::instance()->builtinmodules[name] = module;
+}
+
+void Builtins::init(const char *name, class AbstractFunction *function)
+{
+ Builtins::instance()->builtinfunctions[name] = function;
+}
+
+extern void register_builtin_functions();
+extern void register_builtin_csgops();
+extern void register_builtin_transform();
+extern void register_builtin_color();
+extern void register_builtin_primitives();
+extern void register_builtin_surface();
+extern void register_builtin_control();
+extern void register_builtin_render();
+extern void register_builtin_import();
+extern void register_builtin_projection();
+extern void register_builtin_cgaladv();
+extern void register_builtin_dxf_linear_extrude();
+extern void register_builtin_dxf_rotate_extrude();
+extern void initialize_builtin_dxf_dim();
+
+/*!
+ Registers all builtin functions.
+ Call once for the whole app.
+*/
+void Builtins::initialize()
+{
+ register_builtin_functions();
+ initialize_builtin_dxf_dim();
+
+ init("group", new AbstractModule());
+
+ register_builtin_csgops();
+ register_builtin_transform();
+ register_builtin_color();
+ register_builtin_primitives();
+ register_builtin_surface();
+ register_builtin_control();
+ register_builtin_render();
+ register_builtin_import();
+ register_builtin_projection();
+ register_builtin_cgaladv();
+ register_builtin_dxf_linear_extrude();
+ register_builtin_dxf_rotate_extrude();
+
+ this->deprecations["dxf_linear_extrude"] = "linear_extrude";
+ this->deprecations["dxf_rotate_extrude"] = "rotate_extrude";
+ this->deprecations["import_stl"] = "import";
+ this->deprecations["import_dxf"] = "import";
+ this->deprecations["import_off"] = "import";
+}
+
+std::string Builtins::isDeprecated(const std::string &name)
+{
+ if (this->deprecations.find(name) != this->deprecations.end()) {
+ return this->deprecations[name];
+ }
+ return std::string();
+}
+
+Builtins::~Builtins()
+{
+ BOOST_FOREACH(FunctionContainer::value_type &f, this->builtinfunctions) delete f.second;
+ this->builtinfunctions.clear();
+ BOOST_FOREACH(ModuleContainer::value_type &m, this->builtinmodules) delete m.second;
+ this->builtinmodules.clear();
+}
contact: Jan Huwald // Impressum