KMIME Library
kmime_headerfactory_p.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00033 #ifndef __KMIME_HEADERFACTORY_H__
00034 #define __KMIME_HEADERFACTORY_H__
00035
00036 #include "kmime_export.h"
00037
00038 #include <QtCore/QByteArray>
00039
00040 namespace KMime {
00041
00042 namespace Headers {
00043 class Base;
00044 }
00045
00046 class HeaderMakerBase
00047 {
00048 public:
00049 virtual ~HeaderMakerBase() {}
00050 virtual Headers::Base *create() const = 0;
00051 };
00052
00053 template <typename T>
00054 class HeaderMaker : public HeaderMakerBase
00055 {
00056 public:
00057 virtual Headers::Base *create() const
00058 {
00059 return new T;
00060 }
00061 };
00062
00063 class HeaderFactoryPrivate;
00064
00068 class HeaderFactory
00069 {
00070 public:
00071 static HeaderFactory* self();
00072
00073 template<typename T> inline bool registerHeader()
00074 {
00075 T dummy;
00076 return registerHeaderMaker( QByteArray( dummy.type() ), new HeaderMaker<T>() );
00077 }
00078
00079 Headers::Base *createHeader( const QByteArray &type );
00080
00081 private:
00082 HeaderFactory( HeaderFactoryPrivate *dd );
00083 HeaderFactory( const HeaderFactory &other );
00084 HeaderFactory& operator=( const HeaderFactory &other );
00085 ~HeaderFactory();
00086
00087 bool registerHeaderMaker( const QByteArray &type, HeaderMakerBase *maker );
00088
00089 friend class HeaderFactoryPrivate;
00090 HeaderFactoryPrivate *const d;
00091 };
00092
00093 }
00094
00095 #endif