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;
};
|