ModuleRegistry.cc

Go to the documentation of this file.
00001 // $Header: /cvs/lcd/slic/src/ModuleRegistry.cc,v 1.6 2007/04/27 01:54:35 jeremy Exp $
00002 #include "ModuleRegistry.hh"
00003 
00004 // slic
00005 #include "Module.hh"
00006 
00007 // geant4
00008 #include "globals.hh"
00009 
00010 namespace slic
00011 {
00012   ModuleRegistry::ModuleRegistry()
00013     : Module("ModuleRegistry",false,false)
00014   {}
00015 
00016   ModuleRegistry::~ModuleRegistry()
00017   {}
00018 
00019   Module* ModuleRegistry::findModule(const std::string& name)
00020   {
00021     return m_modules[ name ];
00022   }
00023 
00024   void ModuleRegistry::registerModule(Module* module)
00025   {
00026     if ( module == 0 ) {
00027       log().warning("ModuleRegistry::registerModule - module points to null!");
00028       return;
00029     }
00030 
00031     if ( m_modules[ module->getName() ] == 0 ) {
00032       m_modules[ module->getName() ] = module;
00033     }
00034     else {
00035       log().warning(module->getName() + " is already registered!");
00036     }    
00037   }
00038 
00039   void ModuleRegistry::deregisterModule(Module* module)
00040   {
00041     deregisterModule(module->getName());
00042   }
00043 
00044   void ModuleRegistry::deregisterModule(const std::string& name)
00045   {
00046     ModuleMap::iterator it = m_modules.find( name );
00047 
00048     if ( it != m_modules.end() ) {
00049       m_modules.erase( it );
00050     }
00051   }
00052 
00053   void ModuleRegistry::print()
00054   {
00055     log() << LOG::always << LOG::endl;
00056     log() << LOG::always << "********************" << LOG::endl;
00057     log() << LOG::always << "* Module Registry  *" << LOG::endl;
00058     log() << LOG::always << "********************" << LOG::endl;
00059     for ( ModuleMap::const_iterator it = m_modules.begin();
00060           it != m_modules.end();
00061           it++ ) {
00062       log() << LOG::always << it->first << LOG::endl;
00063     }
00064   }
00065 
00066   void ModuleRegistry::deleteModules()
00067   {
00068     for (ModuleMap::iterator it = m_modules.begin();
00069          it != m_modules.end();
00070          it++) {
00071       // Delete it as long as Module has not
00072       // been flagged to not delete on exit.
00073       if (it->second->deleteOnExit() ) {        
00074         delete it->second;
00075       }
00076     }
00077   }
00078 }

Generated on Thu Nov 15 15:24:16 2007 for Simulator for the Linear Collider by  doxygen 1.5.4