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 +