00001 #include "SingletonManager.hh"
00002 #include "Singleton.hh"
00003 #include <stdlib.h>
00004 #include <typeinfo>
00005 #include <iostream>
00006 #include <string>
00007 #include <cstdlib>
00008 SingletonManager* SingletonManager::msInstance = 0;
00009
00010 SingletonManager& SingletonManager::Instance()
00011 {
00012 if(msInstance==0) {
00013 msInstance = new SingletonManager;
00014 std::atexit(Destroy);
00015 }
00016 return *msInstance;
00017 }
00018
00019 void SingletonManager::RegisterSingleton(SingletonBase* object)
00020 {
00021 std::string name = typeid(*object).name();
00022
00023 mSingletons.push_back(object);
00024 }
00025
00026
00027 SingletonManager::SingletonManager()
00028 {
00029 }
00030
00031 SingletonManager::~SingletonManager()
00032 {
00036
00037 if(mSingletons.size()>0)
00038 for(unsigned int i = mSingletons.size(); i>0; i--) {
00039 std::string name = typeid(*(mSingletons[i-1])).name();
00040
00041
00042 delete mSingletons[i-1];
00043 mSingletons[i-1] = 0;
00044 }
00045 }
00046
00047
00048 void SingletonManager::Destroy()
00049 {
00050 if(msInstance) delete msInstance;
00051 msInstance = 0;
00052 }
00053