From: Christian P. <cp...@us...> - 2005-06-16 13:08:47
|
Update of /cvsroot/pclasses/pclasses2/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27098/src Modified Files: Factory.cpp Log Message: - Use Phoenix<> for FactoryInstanceMap::instance() - Added cleanup code Index: Factory.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/Factory.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Factory.cpp 7 May 2005 11:55:47 -0000 1.2 +++ Factory.cpp 16 Jun 2005 13:08:21 -0000 1.3 @@ -19,10 +19,13 @@ ***************************************************************************/ #include "pclasses/Trace.h" +#include "pclasses/Phoenix.h" #include "pclasses/Factory.h" namespace P { +struct factory_instancemap_context_t { }; + /* The FactoryInstanceMap holds the instances of our Factory objects. */ @@ -31,10 +34,28 @@ typedef std::pair<std::string, std::string> InstanceKey; typedef std::map<InstanceKey, FactoryBase*> FactoryMap; + FactoryInstanceMap() + { + P_TRACE(FactoryInstanceMap) << "FactoryInstanceMap()"; + } + + ~FactoryInstanceMap() + { + P_TRACE(FactoryInstanceMap) << "~FactoryInstanceMap()"; + + FactoryMap::iterator i = _factories.begin(); + while(i != _factories.end()) + { + delete i->second; + FactoryMap::iterator del = i++; + _factories.erase(del); + } + } + static FactoryInstanceMap& instance() { - static FactoryInstanceMap inst; - return inst; + typedef Phoenix<FactoryInstanceMap, factory_instancemap_context_t> PHX; + return PHX::instance(); } void addFactory(const std::string& ifaceType, @@ -60,9 +81,6 @@ } private: - FactoryInstanceMap() {} - ~FactoryInstanceMap() {} - FactoryMap _factories; CoreMutex _mutex; }; |