File indexing completed on 2025-06-17 01:30:20
0001
0002 #include "FWCore/Framework/src/ModuleHolderFactory.h"
0003 #include "FWCore/Framework/interface/maker/ModuleMakerPluginFactory.h"
0004 #include "FWCore/Framework/interface/ModuleTypeResolverMaker.h"
0005 #include "FWCore/Framework/interface/resolveMaker.h"
0006 #include "FWCore/Utilities/interface/EDMException.h"
0007 #include "FWCore/Utilities/interface/Algorithms.h"
0008
0009 #include <iostream>
0010
0011 EDM_REGISTER_PLUGINFACTORY(edm::ModuleMakerPluginFactory, "CMS EDM Framework Module");
0012 namespace edm {
0013
0014 ModuleHolderFactory const ModuleHolderFactory::singleInstance_;
0015
0016 ModuleHolderFactory::~ModuleHolderFactory() = default;
0017
0018 ModuleHolderFactory::ModuleHolderFactory() = default;
0019
0020 ModuleHolderFactory const* ModuleHolderFactory::get() { return &singleInstance_; }
0021
0022 ModuleMakerBase const* ModuleHolderFactory::findMaker(const MakeModuleParams& p,
0023 ModuleTypeResolverMaker const* resolverMaker) const {
0024 std::string modtype = p.pset_->getParameter<std::string>("@module_type");
0025 MakerMap::iterator it = makers_.find(modtype);
0026 if (it != makers_.end()) {
0027 return it->second.get();
0028 }
0029 return detail::resolveMaker<ModuleMakerPluginFactory>(modtype, resolverMaker, *p.pset_, makers_);
0030 }
0031
0032 std::shared_ptr<maker::ModuleHolder> ModuleHolderFactory::makeModule(
0033 const MakeModuleParams& p,
0034 const ModuleTypeResolverMaker* resolverMaker,
0035 signalslot::Signal<void(const ModuleDescription&)>& pre,
0036 signalslot::Signal<void(const ModuleDescription&)>& post) const {
0037 auto maker = findMaker(p, resolverMaker);
0038 auto mod(maker->makeModule(p, pre, post));
0039 return mod;
0040 }
0041
0042 std::shared_ptr<maker::ModuleHolder> ModuleHolderFactory::makeReplacementModule(const edm::ParameterSet& p) const {
0043 std::string modtype = p.getParameter<std::string>("@module_type");
0044 MakerMap::iterator it = makers_.find(modtype);
0045 if (it != makers_.end()) {
0046 return it->second->makeReplacementModule(p);
0047 }
0048 return std::shared_ptr<maker::ModuleHolder>{};
0049 }
0050 }