/* core/module.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include "core/module.h" #include "sys/sys.h" namespace core { /*-- static functions ----------------------------------------------*/ Module *Module::module_preload = 0; Module::Registry Module::module_registry; Module *Module::find(std::string const &name) { Registry::iterator it = module_registry.find(name); if (it == module_registry.end()) return 0; else return (*it).second; } Module *Module::find(const char *name) { return(find(std::string(name))); } 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; module->module_label.assign(name); 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::clear() { 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_interactive = true; } Module::~Module() { module_running = false; module_name.clear(); } void Module::abort() { module_running = false; } }