CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
edm::Factory Class Reference

#include <Factory.h>

Public Types

typedef std::map< std::string, edm::propagate_const< Maker * > > MakerMap
 

Public Member Functions

std::shared_ptr< maker::ModuleHoldermakeModule (const MakeModuleParams &, const ModuleTypeResolverBase *, signalslot::Signal< void(const ModuleDescription &)> &pre, signalslot::Signal< void(const ModuleDescription &)> &post) const
 
std::shared_ptr< maker::ModuleHoldermakeReplacementModule (const edm::ParameterSet &) const
 
 ~Factory ()
 

Static Public Member Functions

static Factory const * get ()
 

Private Member Functions

 Factory ()
 
MakerfindMaker (const MakeModuleParams &p, const ModuleTypeResolverBase *) const
 

Private Attributes

MakerMap makers_
 

Static Private Attributes

static Factory const singleInstance_
 

Detailed Description

Definition at line 18 of file Factory.h.

Member Typedef Documentation

◆ MakerMap

typedef std::map<std::string, edm::propagate_const<Maker*> > edm::Factory::MakerMap

Definition at line 20 of file Factory.h.

Constructor & Destructor Documentation

◆ ~Factory()

edm::Factory::~Factory ( )

Definition at line 18 of file Factory.cc.

References edm::cleanup(), edm::for_all(), and makers_.

18 { for_all(makers_, cleanup); }
static void cleanup(const Factory::MakerMap::value_type &v)
Definition: Factory.cc:14
Func for_all(ForwardSequence &s, Func f)
wrapper for std::for_each
Definition: Algorithms.h:14
MakerMap makers_
Definition: Factory.h:39

◆ Factory()

edm::Factory::Factory ( )
private

Definition at line 20 of file Factory.cc.

21  : makers_()
22 
23  {}
MakerMap makers_
Definition: Factory.h:39

Member Function Documentation

◆ findMaker()

Maker * edm::Factory::findMaker ( const MakeModuleParams p,
const ModuleTypeResolverBase resolver 
) const
private

Definition at line 57 of file Factory.cc.

References edm::annotateExceptionAndRethrow(), FDEBUG, get, edm::ModuleTypeResolverBase::kInitialIndex, edm::ModuleTypeResolverBase::kLastIndex, visualization-live-secondInstance_cfg::m, reco::modules::make(), makers_, eostools::move(), AlCaHLTBitMon_ParallelJobs::p, edm::ModuleTypeResolverBase::resolveType(), runTheMatrix::ret, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by makeModule().

57  {
58  std::string modtype = p.pset_->getParameter<std::string>("@module_type");
59  FDEBUG(1) << "Factory: module_type = " << modtype << std::endl;
60  MakerMap::iterator it = makers_.find(modtype);
61 
62  if (it == makers_.end()) {
63  auto make = [](auto resolver, const auto& modtype, auto const& p) {
64  if (resolver) {
65  auto index = resolver->kInitialIndex;
66  auto newType = modtype;
67  do {
68  auto [ttype, tindex] = resolver->resolveType(std::move(newType), index);
69  newType = std::move(ttype);
70  index = tindex;
71  auto m = MakerPluginFactory::get()->tryToCreate(newType);
72  if (m) {
73  return m;
74  }
75  } while (index != resolver->kLastIndex);
76  try {
77  //failed to find a plugin
78  return MakerPluginFactory::get()->create(modtype);
79  } catch (cms::Exception& iExcept) {
80  annotateExceptionAndRethrow(iExcept, p, modtype, resolver);
81  }
82  }
83  return MakerPluginFactory::get()->create(modtype);
84  };
85  std::unique_ptr<Maker> wm = make(resolver, modtype, p);
86  FDEBUG(1) << "Factory: created worker of type " << modtype << std::endl;
87 
88  std::pair<MakerMap::iterator, bool> ret = makers_.insert(std::pair<std::string, Maker*>(modtype, wm.get()));
89 
90  it = ret.first;
91  wm.release();
92  }
93  return it->second;
94  }
ret
prodAgent to be discontinued
S make(const edm::ParameterSet &cfg)
#define FDEBUG(lev)
Definition: DebugMacros.h:19
static void annotateExceptionAndRethrow(cms::Exception &except, const MakeModuleParams &p, std::string const &modtype, ModuleTypeResolverBase const *resolver)
Definition: Factory.cc:27
#define get
def move(src, dest)
Definition: eostools.py:511
MakerMap makers_
Definition: Factory.h:39

◆ get()

Factory const * edm::Factory::get ( )
static

◆ makeModule()

std::shared_ptr< maker::ModuleHolder > edm::Factory::makeModule ( const MakeModuleParams p,
const ModuleTypeResolverBase resolver,
signalslot::Signal< void(const ModuleDescription &)> &  pre,
signalslot::Signal< void(const ModuleDescription &)> &  post 
) const

Definition at line 96 of file Factory.cc.

References findMaker(), mod(), and AlCaHLTBitMon_ParallelJobs::p.

Referenced by edm::ModuleRegistry::getModule().

100  {
101  auto maker = findMaker(p, resolver);
102  auto mod(maker->makeModule(p, pre, post));
103  return mod;
104  }
Maker * findMaker(const MakeModuleParams &p, const ModuleTypeResolverBase *) const
Definition: Factory.cc:57
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4

◆ makeReplacementModule()

std::shared_ptr< maker::ModuleHolder > edm::Factory::makeReplacementModule ( const edm::ParameterSet p) const

Definition at line 106 of file Factory.cc.

References makers_, AlCaHLTBitMon_ParallelJobs::p, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by edm::ModuleRegistry::replaceModule().

106  {
107  std::string modtype = p.getParameter<std::string>("@module_type");
108  MakerMap::iterator it = makers_.find(modtype);
109  if (it != makers_.end()) {
110  return it->second->makeReplacementModule(p);
111  }
112  return std::shared_ptr<maker::ModuleHolder>{};
113  }
MakerMap makers_
Definition: Factory.h:39

Member Data Documentation

◆ makers_

MakerMap edm::Factory::makers_
mutableprivate

Definition at line 39 of file Factory.h.

Referenced by findMaker(), makeReplacementModule(), and ~Factory().

◆ singleInstance_

Factory const edm::Factory::singleInstance_
staticprivate

Definition at line 37 of file Factory.h.

Referenced by get().