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