Go to the documentation of this file.00001 #ifndef FWCore_PluginManager_PluginFactoryBase_h
00002 #define FWCore_PluginManager_PluginFactoryBase_h
00003
00004
00005
00006
00007
00017
00018
00019
00020
00021
00022
00023
00024 #include <string>
00025 #include <vector>
00026 #include <map>
00027 #include "sigc++/signal.h"
00028
00029 #include "FWCore/PluginManager/interface/PluginInfo.h"
00030
00031
00032 namespace edmplugin {
00033 class PluginFactoryBase
00034 {
00035
00036 public:
00037 PluginFactoryBase() {}
00038 virtual ~PluginFactoryBase();
00039
00040 typedef std::vector<std::pair<void*, std::string> > PMakers;
00041 typedef std::map<std::string, PMakers > Plugins;
00042
00043
00044
00046 virtual std::vector<PluginInfo> available() const;
00047
00049 virtual const std::string& category() const = 0;
00050
00052 mutable sigc::signal<void,const std::string&, const PluginInfo&> newPluginAdded_;
00053
00054
00055
00056
00057
00058 protected:
00063 void finishedConstruction();
00064
00065 void newPlugin(const std::string& iName);
00066
00067
00068
00069
00070 Plugins::const_iterator findPMaker(const std::string& iName) const;
00071
00072
00073 Plugins::const_iterator tryToFindPMaker(const std::string& iName) const;
00074
00075 void fillInfo(const PMakers &makers,
00076 PluginInfo& iInfo,
00077 std::vector<PluginInfo>& iReturn ) const;
00078
00079 void fillAvailable(std::vector<PluginInfo>& iReturn) const;
00080
00081 void registerPMaker(void* iPMaker, const std::string& iName);
00082
00083 Plugins m_plugins;
00084
00085 private:
00086 PluginFactoryBase(const PluginFactoryBase&);
00087
00088 const PluginFactoryBase& operator=(const PluginFactoryBase&);
00089
00090 void checkProperLoadable(const std::string& iName, const std::string& iLoadedFrom) const;
00091
00092
00093 };
00094
00095 }
00096 #endif