00001 /*========================================================================= 00002 00003 Library: qCTK 00004 00005 Copyright (c) Kitware Inc. 00006 All rights reserved. 00007 Distributed under a BSD License. See LICENSE.txt file. 00008 00009 This software is distributed "AS IS" WITHOUT ANY WARRANTY; without even 00010 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00011 See the above copyright notice for more information. 00012 00013 =========================================================================*/ 00014 00015 #ifndef __qCTKAbstractFactory_h 00016 #define __qCTKAbstractFactory_h 00017 00018 #include <QString> 00019 #include <QHash> 00020 #include <QSharedPointer> 00021 #include <QStringList> 00022 00023 #ifdef _MSC_VER 00026 # pragma warning(disable: 4505) 00027 #endif 00028 00029 //---------------------------------------------------------------------------- 00030 template<typename BaseClassType> 00031 class qCTKAbstractFactoryItem 00032 { 00033 public: 00034 explicit qCTKAbstractFactoryItem(const QString& key); 00035 00036 virtual QString loadErrorString()const; 00037 virtual bool load() = 0; 00038 BaseClassType* instantiate(); 00039 bool instantiated(); 00040 QString key(); 00041 virtual void uninstantiate(); 00042 protected: 00043 virtual BaseClassType* instanciator() = 0; 00044 BaseClassType* Instance; 00045 private: 00046 QString Key; 00047 }; 00048 00049 //---------------------------------------------------------------------------- 00050 template<typename BaseClassType> 00051 class qCTKAbstractFactory 00052 { 00053 protected: 00054 typedef typename QHash<QString, QSharedPointer<qCTKAbstractFactoryItem<BaseClassType> > >::const_iterator ConstIterator; 00055 typedef typename QHash<QString, QSharedPointer<qCTKAbstractFactoryItem<BaseClassType> > >::iterator Iterator; 00056 00057 public: 00060 explicit qCTKAbstractFactory(); 00061 virtual ~qCTKAbstractFactory(); 00062 virtual void printAdditionalInfo(); 00063 00066 virtual BaseClassType * instantiate(const QString& itemKey); 00067 00070 void uninstantiate(const QString& itemKey); 00071 00074 QStringList names() const; 00075 00079 virtual void registerItems(){} 00080 00081 protected: 00082 00086 bool registerItem(const QSharedPointer<qCTKAbstractFactoryItem<BaseClassType> > & item); 00087 00090 qCTKAbstractFactoryItem<BaseClassType> * item(const QString& itemKey)const; 00091 00092 private: 00093 qCTKAbstractFactory(const qCTKAbstractFactory &); 00094 void operator=(const qCTKAbstractFactory&); 00095 00096 QHash<QString, QSharedPointer<qCTKAbstractFactoryItem<BaseClassType> > > RegisteredItemMap; 00097 }; 00098 00099 #include "qCTKAbstractFactory.txx" 00100 00101 #endif
1.6.1