File indexing completed on 2024-04-06 12:12:11
0001 #ifndef FWCore_Framework_Factory_h
0002 #define FWCore_Framework_Factory_h
0003
0004 #include "FWCore/Framework/interface/maker/Worker.h"
0005 #include "FWCore/Framework/interface/maker/WorkerMaker.h"
0006 #include "FWCore/Framework/interface/maker/MakeModuleParams.h"
0007
0008 #include <map>
0009 #include <string>
0010 #include <memory>
0011 #include "FWCore/Utilities/interface/Signal.h"
0012 #include "FWCore/Utilities/interface/propagate_const.h"
0013 #include "FWCore/Utilities/interface/thread_safety_macros.h"
0014
0015 namespace edm {
0016 class ModuleTypeResolverMaker;
0017
0018 class Factory {
0019 public:
0020 typedef std::map<std::string, std::unique_ptr<Maker const>> MakerMap;
0021
0022 ~Factory();
0023
0024 static Factory const* get();
0025
0026
0027 std::shared_ptr<maker::ModuleHolder> makeModule(const MakeModuleParams&,
0028 const ModuleTypeResolverMaker*,
0029 signalslot::Signal<void(const ModuleDescription&)>& pre,
0030 signalslot::Signal<void(const ModuleDescription&)>& post) const;
0031
0032 std::shared_ptr<maker::ModuleHolder> makeReplacementModule(const edm::ParameterSet&) const;
0033
0034 private:
0035 Factory();
0036 Maker const* findMaker(const MakeModuleParams& p, const ModuleTypeResolverMaker*) const;
0037 static Factory const singleInstance_;
0038
0039 CMS_SA_ALLOW mutable MakerMap makers_;
0040 };
0041
0042 }
0043 #endif