From 9a13b924d8d4b70002befb7d262f12b809c7a86d Mon Sep 17 00:00:00 2001 From: Dave Goodwin Date: Thu, 10 May 2007 18:39:09 +0000 Subject: [PATCH] added FactoryBase.h --- Cantera/src/base/FactoryBase.h | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Cantera/src/base/FactoryBase.h diff --git a/Cantera/src/base/FactoryBase.h b/Cantera/src/base/FactoryBase.h new file mode 100644 index 000000000..1fbc08707 --- /dev/null +++ b/Cantera/src/base/FactoryBase.h @@ -0,0 +1,50 @@ +#ifndef CT_FACTORY_BASE +#define CT_FACTORY_BASE + +#include + +#if defined(THREAD_SAFE_CANTERA) +#include +#endif + +namespace Cantera { + + /** + * Base class for factories. This class maintains a registry of + * all factories that derive from it, and deletes them all when + * its static method deleteFactories is invoked. + */ + class FactoryBase + { + public: + virtual ~FactoryBase() + { + } + + static void deleteFactories() + { + std::vector< FactoryBase* >::iterator iter ; + for ( iter = s_vFactoryRegistry.begin(); + iter != s_vFactoryRegistry.end(); + ++iter) + { + (*iter)->deleteFactory() ; + } + s_vFactoryRegistry.clear() ; + } + + protected: + FactoryBase() + { + s_vFactoryRegistry.push_back(this) ; + } + + virtual void deleteFactory() = 0 ; + + private: + static std::vector s_vFactoryRegistry ; + }; +} + +#endif +