From fd778219e40c5fbb4d0af1839cbc313caaf10d9d Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 28 Sep 2008 15:05:13 +0000 Subject: move base game module to new subdirectory --- src/core/module.cc | 70 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 12 deletions(-) (limited to 'src/core/module.cc') diff --git a/src/core/module.cc b/src/core/module.cc index 447e2b3..89bc2fe 100644 --- a/src/core/module.cc +++ b/src/core/module.cc @@ -5,36 +5,82 @@ */ #include "core/module.h" +#include "sys/sys.h" namespace core { +/*-- static functions ----------------------------------------------*/ + Module *Module::module_preload = 0; +Module::Registry Module::module_registry; -Module::Module(const char *name) : - module_name(name) +Module *Module::find(std::string const &name) { - module_running = false; + Registry::iterator it = module_registry.find(name); + if (it == module_registry.end()) + return 0; + else + return (*it).second; } -Module::~Module() +Module *Module::find(const char *name) { - module_running = false; - module_name.clear(); + return(find(std::string(name))); } - -void Module::load(Module *module) +Module *Module::add(const char *name, Module *module) { + Module *m = find(name); + if (m) { + con_warn << "module '" << name << "' already loaded!" << std::endl; + delete module; + return 0; + } + module_registry[std::string(name)] = module; + if (!module_preload) { + module_preload = module; + con_debug << " " << name << " " << module->name() << std::endl; + } + return module; +} + +Module *Module::load(const char *name) +{ + Module *module = find(name); + if (!module) { + con_warn << "could not find module '" << name << "'" << std::endl; + return 0; + } + + con_debug << " " << name << " " << module->name() << std::endl; module_preload = module; + return module; } -void Module::unload() +void Module::clear() { - if (module_preload) { - delete module_preload; - module_preload = 0; + for (Registry::iterator it = module_registry.begin(); it != module_registry.end(); it++) { + Module *module = (*it).second; + delete module; } + + module_registry.clear(); + module_preload = 0; +} + +/*-- instance functions --------------------------------------------*/ + +Module::Module(const char *name) : + module_name(name) +{ + module_running = false; +} + +Module::~Module() +{ + module_running = false; + module_name.clear(); } void Module::abort() -- cgit v1.2.3