Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }  // namespace edm