diff options
author | don bright <hugh.m.bright@gmail.com> | 2011-11-06 18:19:09 (GMT) |
---|---|---|
committer | don bright <hugh.m.bright@gmail.com> | 2011-11-06 18:19:09 (GMT) |
commit | 8baead275affe384e2344bbbff78b046c08c8812 (patch) | |
tree | 63d741c40631a6c6f1b42a598a672a19844f9f72 /src/builtin.cc | |
parent | 31a97f34e1122690cbad2c9bf01f3ede6d3da135 (diff) | |
parent | 6bb261bcd5922c69770c27d25f43c7c315c101a4 (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'src/builtin.cc')
-rw-r--r-- | src/builtin.cc | 86 |
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(); +} |