00001 #ifndef _Q_GENERAL_FACTORY_HH_
00002 #define _Q_GENERAL_FACTORY_HH_
00003
00023 #include <string>
00024 #include <list>
00025 #include <map>
00026
00027 #include "QNamed.hh"
00028 #include "QBaseModuleFactory.hh"
00029
00030 class QGlobalReaderFactory;
00031 class QGlobalReader;
00032 class QGlobalWriterFactory;
00033 class QGlobalWriter;
00034 class QModule;
00035 class QFilter;
00036 class QReader;
00037 class QWriter;
00038 class QDriver;
00039
00040 class QSequence;
00041 class QDLLLoader;
00042
00043 #define Q_PLUGIN_PREFIX_STR "registerInFactory"
00044
00045 class QGeneralFactory : public QNamed {
00046 public:
00047 static QGeneralFactory& GetInstance();
00048
00049 virtual ~QGeneralFactory();
00050
00051 void LoadPlugin(const std::string& name);
00052
00053 void RegisterGlobalReader(QGlobalReaderFactory* GRF);
00054 std::list<const QGlobalReaderFactory*> GetListOfGlobalReaders() const;
00055 QGlobalReader* CreateGlobalReader(const std::string& name);
00056
00057 void RegisterGlobalWriter(QGlobalWriterFactory* GRF);
00058 std::list<const QGlobalWriterFactory*> GetListOfGlobalWriters() const;
00059 QGlobalWriter* CreateGlobalWriter(const std::string& name);
00060
00061 void Register(QModFactory<QModule>* MF);
00062 QModule* CreateModule(const std::string& name, QSequence* s);
00063
00064 void Register(QModFactory<QReader>* MF);
00065 QReader* CreateReader(const std::string& name, QSequence* s);
00066
00067 void Register(QModFactory<QWriter>* MF);
00068 QWriter* CreateWriter(const std::string& name, QSequence* s);
00069
00070 void Register(QModFactory<QFilter>* MF);
00071 QFilter* CreateFilter(const std::string& name, QSequence* s);
00072
00073 void Register(QModFactory<QDriver>* MF);
00074 QDriver* CreateDriver(const std::string& name, QSequence* s);
00075
00076 private:
00077 QGeneralFactory();
00078 QDLLLoader* fDLLLoader;
00079
00080 std::map<std::string, QGlobalReaderFactory*> fGlobalReaders;
00081 std::map<std::string, QGlobalWriterFactory*> fGlobalWriters;
00082 std::map<std::string, QModFactory<QModule>* > fModules;
00083 std::map<std::string, QModFactory<QFilter>* > fFilters;
00084 std::map<std::string, QModFactory<QReader>* > fReaders;
00085 std::map<std::string, QModFactory<QWriter>* > fWriters;
00086 std::map<std::string, QModFactory<QDriver>* > fDrivers;
00087
00088 };
00089
00090 #endif