00001 #ifndef FWCore_Framework_Factory_h 00002 #define FWCore_Framework_Factory_h 00003 00004 #include "FWCore/PluginManager/interface/PluginFactory.h" 00005 #include "FWCore/Framework/src/Worker.h" 00006 #include "FWCore/Framework/src/WorkerMaker.h" 00007 #include "FWCore/Framework/src/WorkerParams.h" 00008 00009 #include <map> 00010 #include <string> 00011 #include <memory> 00012 #include "sigc++/signal.h" 00013 00014 namespace edm { 00015 typedef edmplugin::PluginFactory<Maker* ()> MakerPluginFactory; 00016 00017 class Factory 00018 { 00019 public: 00020 typedef std::map<std::string, Maker*> MakerMap; 00021 00022 ~Factory(); 00023 00024 static Factory* get(); 00025 00026 std::auto_ptr<Worker> makeWorker(const WorkerParams&, 00027 sigc::signal<void, const ModuleDescription&>& pre, 00028 sigc::signal<void, const ModuleDescription&>& post) const; 00029 00030 00031 private: 00032 Factory(); 00033 static Factory singleInstance_; 00034 mutable MakerMap makers_; 00035 }; 00036 00037 } 00038 #endif