Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

ModuleStore.h

Go to the documentation of this file.
00001 #ifndef MediaTable_ModuleStore_h
00002 #define MediaTable_ModuleStore_h
00003 
00004 #include "Module.h"
00005 
00006 namespace Impala {
00007 namespace Application {
00008 namespace MediaTable {
00009 
00010 class ModuleStore {
00011 public:
00012     typedef std::map<std::string, Module*>                                      ModuleMapType;
00013     typedef std::multimap<std::string, ModuleListener*>         ModuleListenersMapType;
00014 
00015     static void Initialize()
00016     {
00017         if (sInstance)
00018         {
00019             ILOG_WARN("ModuleStore already initialized. Skipping.");
00020             return;
00021         }
00022         sInstance = new ModuleStore();
00023     }
00024 
00025     static ModuleStore* GetInstance()
00026     {
00027         if (!sInstance)
00028         {
00029             sInstance = new ModuleStore();
00030         }
00031         return sInstance;
00032     }
00033 
00034     void Register(Module* module) {
00035         mModules[module->GetType()][module->GetName()] = module;
00036         // AddExistingListeners
00037         std::pair<ModuleListenersMapType::iterator,ModuleListenersMapType::iterator> listeners
00038                         = mListeners.equal_range(module->GetType());
00039         for (ModuleListenersMapType::iterator it=listeners.first ; it != listeners.second; it++ )
00040                 module->AddModuleListener((*it).second);
00041     }
00042 
00043     void Unregister(Module* module) {
00044         mModules[module->GetType()].erase(module->GetName());
00045     }
00046 
00047     void RegisterListener(ModuleListener* listener) {
00048         mListeners.insert(std::pair<std::string, ModuleListener*>(listener->GetType(), listener));
00049         ModuleMapType modules = GetModulesOfType(listener->GetType());
00050         for (ModuleMapType::iterator it=modules.begin() ; it != modules.end(); it++ )
00051                 (*it).second->AddModuleListener(listener);
00052     }
00053 
00054     int CountModulesOfType(std::string type)
00055     {
00056         return mModules[type].size();
00057     }
00058 
00059     void Clear() {
00060         delete sInstance;
00061         sInstance = new ModuleStore();
00062     }
00063 
00064     ModuleMapType GetModulesOfType(std::string type) {
00065         return mModules[type];
00066     }
00067 
00068 private:
00069     ModuleStore() // constructor: private
00070     {
00071         Init();
00072     }
00073 
00074     ModuleStore(ModuleStore const&){};             // copy constructor: private
00075     ModuleStore& operator=(ModuleStore const&){};  // assignment operator: private
00076 
00077     void Init()
00078     {
00079         ILOG_DEBUG("Initializing ModuleStore");
00080     }
00081 
00082     typedef std::map<std::string, ModuleMapType>                ModuleMapMapType;
00083 
00084     ModuleMapMapType                    mModules;
00085     ModuleListenersMapType              mListeners;
00086 
00087     static ModuleStore*         sInstance;
00088 
00089     ILOG_VAR_DEC;
00090 };
00091 
00092 ModuleStore* ModuleStore::sInstance = 0;
00093 
00094 ILOG_VAR_INIT(ModuleStore, Application.MediaTable);
00095 
00096 } // namespace MediaTable
00097 } // namespace Application
00098 } // namespace Impala
00099 #endif // ModuleStore_h

Generated on Fri Mar 19 09:30:33 2010 for ImpalaSrc by  doxygen 1.5.1