qCTKAbstractFactory.h

Go to the documentation of this file.
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

Generated on 6 Apr 2011 for Slicer3 by  doxygen 1.6.1