Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

modulemanager.cpp

Go to the documentation of this file.
00001 
00002 #include <kore/version.h>
00003 #include <kore/modulemanager.h>
00004 
00005 #define MM_MAJOR 0
00006 #define MM_MINOR 0
00007 #define MM_REVISION 1
00008 #define MM_VERSION "0.0.1"
00009 #define MM_API_MAJOR 0
00010 #define MM_API_MINOR 0
00011 #define MM_API_REVISION 1
00012 #define MM_API_VERSION "0.0.1"
00013 #define MM_NAME "Module Manager"
00014 #define MM_TYPE "Module Manager"
00015 #define MM_DESCRIPTION "Default Kore Module Manager"
00016 #define MM_SERVICE "Kore/Kernel/Module Manager"
00017 #define MM_SERVICE_DESCRIPTION "Kore Module Manager"
00018 
00019 using namespace kore;
00020 
00021 ModuleManager::ModuleManager()
00022 {
00023     _mmVersion = new Version(MM_MAJOR,MM_MINOR,MM_REVISION,MM_VERSION);
00024     _mmAPIVersion = new Version(MM_API_MAJOR,MM_API_MINOR,MM_API_REVISION,MM_API_VERSION);
00025     _mmInfo = new Info(this, MM_NAME, MM_TYPE, MM_DESCRIPTION, _mmVersion, _mmAPIVersion);
00026     setInfo(_mmInfo);
00027     _mmService = new Service(this, MM_SERVICE, MM_SERVICE_DESCRIPTION);
00028     addService(_mmService);
00029 }
00030 ModuleManager::~ModuleManager()
00031 {
00032     unregisterModules();
00033     delete _mmInfo;
00034     delete _mmVersion;
00035     delete _mmAPIVersion;
00036     delete _mmService;
00037 }
00038 
00039 void ModuleManager::registerModule(Module* module)
00040 {
00041     module->registeringModule(this);
00042     _modules.insert(module);
00043     module->moduleRegistered(this);
00044 }
00045 
00046 void ModuleManager::unregisterModule(Module* module)
00047 {
00048     module->unregisteringModule(this);
00049     _modules.erase(_modules.find(module));
00050     module->moduleUnregistered(this);
00051 }
00052 
00053 void ModuleManager::registerModules(Module** modules)
00054 {
00055     for(int i = 0; modules[i]; i++)
00056         registerModule(modules[i]);
00057 }
00058 void ModuleManager::unregisterModules()
00059 {
00060     int n = _modules.size();
00061 #ifdef WIN32
00062     mod_set_type::iterator* it = new mod_set_type::iterator[n];
00063     mod_set_type::iterator b,e;
00064 #else
00065     mod_set_type::const_iterator* it = new mod_set_type::const_iterator[n];
00066     mod_set_type::const_iterator b,e;
00067 #endif
00068     b = _modules.begin();
00069     e = _modules.end();
00070     int i = 0;
00071 #ifdef WIN32
00072     mod_set_type::iterator j;
00073 #else
00074     mod_set_type::const_iterator j;
00075 #endif
00076     for( j = b; j != e; ++j, ++i )
00077         it[i] = j;
00078     for( i = 0; i < n; i++)
00079     {
00080         (*it[i])->unregisteringModule(this);
00081         Module* mod = *it[i];
00082         _modules.erase(it[i]);
00083         mod->moduleUnregistered(this);
00084     }
00085 }
00086 
00087 Module** ModuleManager::registeredModules() const
00088 {
00089     int n = _modules.size();
00090     Module** mod = new Module*[n+1];
00091     mod_set_type::const_iterator b,e;
00092     b = _modules.begin();
00093     e = _modules.end();
00094     int i = 0;
00095     for( mod_set_type::const_iterator j = b; j != e; ++j, ++i )
00096         mod[i] = *j;
00097     mod[i] = 0;
00098     return mod;
00099 }

Generated on Sat Feb 16 13:34:28 2002 for Korelib by doxygen1.2.12 written by Dimitri van Heesch, © 1997-2001