Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

#include "FWCore/Framework/src/ModuleHolderFactory.h"
#include "FWCore/Framework/interface/maker/ModuleMakerPluginFactory.h"
#include "FWCore/Framework/interface/ModuleTypeResolverMaker.h"
#include "FWCore/Framework/interface/resolveMaker.h"
#include "FWCore/Utilities/interface/EDMException.h"
#include "FWCore/Utilities/interface/Algorithms.h"

#include <iostream>

EDM_REGISTER_PLUGINFACTORY(edm::ModuleMakerPluginFactory, "CMS EDM Framework Module");
namespace edm {

  ModuleHolderFactory const ModuleHolderFactory::singleInstance_;

  ModuleHolderFactory::~ModuleHolderFactory() = default;

  ModuleHolderFactory::ModuleHolderFactory() = default;

  ModuleHolderFactory const* ModuleHolderFactory::get() { return &singleInstance_; }

  ModuleMakerBase const* ModuleHolderFactory::findMaker(const MakeModuleParams& p,
                                                        ModuleTypeResolverMaker const* resolverMaker) const {
    std::string modtype = p.pset_->getParameter<std::string>("@module_type");
    MakerMap::iterator it = makers_.find(modtype);
    if (it != makers_.end()) {
      return it->second.get();
    }
    return detail::resolveMaker<ModuleMakerPluginFactory>(modtype, resolverMaker, *p.pset_, makers_);
  }

  std::shared_ptr<maker::ModuleHolder> ModuleHolderFactory::makeModule(
      const MakeModuleParams& p,
      const ModuleTypeResolverMaker* resolverMaker,
      signalslot::Signal<void(const ModuleDescription&)>& pre,
      signalslot::Signal<void(const ModuleDescription&)>& post) const {
    auto maker = findMaker(p, resolverMaker);
    auto mod(maker->makeModule(p, pre, post));
    return mod;
  }

  std::shared_ptr<maker::ModuleHolder> ModuleHolderFactory::makeReplacementModule(const edm::ParameterSet& p) const {
    std::string modtype = p.getParameter<std::string>("@module_type");
    MakerMap::iterator it = makers_.find(modtype);
    if (it != makers_.end()) {
      return it->second->makeReplacementModule(p);
    }
    return std::shared_ptr<maker::ModuleHolder>{};
  }
}  // namespace edm