CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
WorkerMaker.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_WorkerMaker_h
2 #define FWCore_Framework_WorkerMaker_h
3 
6 
7 #include <memory>
8 #include <string>
9 #include "sigc++/signal.h"
10 
11 
12 namespace edm {
14  class ModuleDescription;
15  class ParameterSet;
16 
17  class Maker {
18  public:
19  virtual ~Maker();
20  std::auto_ptr<Worker> makeWorker(WorkerParams const&,
21  sigc::signal<void, ModuleDescription const&>& iPre,
22  sigc::signal<void, ModuleDescription const&>& iPost) const;
23  void swapModule(Worker*, ParameterSet const&);
24  protected:
26 
28  sigc::signal<void, ModuleDescription const&>& post,
29  cms::Exception const& iException) const;
30 
32  cms::Exception const& iException) const;
33 
34  void validateEDMType(std::string const& edmType, WorkerParams const& p) const;
35 
36  private:
37  virtual void fillDescriptions(ConfigurationDescriptions& iDesc) const = 0;
38  virtual std::auto_ptr<Worker> makeWorker(WorkerParams const& p,
39  ModuleDescription const& md) const = 0;
40  virtual const std::string& baseType() const =0;
41  virtual void implSwapModule(Worker*, ParameterSet const&)=0;
42  };
43 
44  template <class T>
45  class WorkerMaker : public Maker {
46  public:
47  //typedef T worker_type;
48  explicit WorkerMaker();
49  private:
50  virtual void fillDescriptions(ConfigurationDescriptions& iDesc) const;
51  virtual std::auto_ptr<Worker> makeWorker(WorkerParams const& p, ModuleDescription const& md) const;
52  virtual const std::string& baseType() const;
53  virtual void implSwapModule(Worker*, ParameterSet const&);
54  };
55 
56  template <class T>
58  }
59 
60  template <class T>
62  T::fillDescriptions(iDesc);
63  }
64 
65  template <class T>
66  std::auto_ptr<Worker> WorkerMaker<T>::makeWorker(WorkerParams const& p, ModuleDescription const& md) const {
67  typedef T UserType;
68  typedef typename UserType::ModuleType ModuleType;
69  typedef typename UserType::WorkerType WorkerType;
70 
71  std::auto_ptr<ModuleType> module(WorkerType::template makeModule<UserType>(md, *p.pset_));
72  return std::auto_ptr<Worker>(new WorkerType(module, md, p));
73  }
74 
75 
76  template <class T>
78  typedef T UserType;
79  typedef typename UserType::ModuleType ModuleType;
80  typedef typename UserType::WorkerType WorkerType;
81 
82  WorkerType* wt = dynamic_cast<WorkerType*>(w);
83  assert(0!=wt);
84 
85  std::auto_ptr<ModuleType> module(WorkerType::template makeModule<UserType>(w->description(), p));
86 
87  wt->setModule(module);
88  }
89 
90  template<class T>
91  const std::string& WorkerMaker<T>::baseType() const {
92  return T::baseType();
93  }
94 
95 }
96 
97 #endif
int module() const
Definition: HLTadd.h:12
ModuleDescription const & description() const
Definition: Worker.h:63
void throwValidationException(WorkerParams const &p, cms::Exception const &iException) const
Definition: WorkerMaker.cc:24
ParameterSet * pset_
Definition: WorkerParams.h:38
virtual const std::string & baseType() const
Definition: WorkerMaker.h:91
virtual void fillDescriptions(ConfigurationDescriptions &iDesc) const
Definition: WorkerMaker.h:61
std::auto_ptr< Worker > makeWorker(WorkerParams const &, sigc::signal< void, ModuleDescription const & > &iPre, sigc::signal< void, ModuleDescription const & > &iPost) const
Definition: WorkerMaker.cc:61
virtual const std::string & baseType() const =0
void swapModule(Worker *, ParameterSet const &)
Definition: WorkerMaker.cc:90
void validateEDMType(std::string const &edmType, WorkerParams const &p) const
Definition: WorkerMaker.cc:49
virtual void implSwapModule(Worker *, ParameterSet const &)=0
ModuleDescription createModuleDescription(WorkerParams const &p) const
Definition: WorkerMaker.cc:14
virtual void fillDescriptions(ConfigurationDescriptions &iDesc) const =0
void throwConfigurationException(ModuleDescription const &md, sigc::signal< void, ModuleDescription const & > &post, cms::Exception const &iException) const
Definition: WorkerMaker.cc:38
virtual void implSwapModule(Worker *, ParameterSet const &)
Definition: WorkerMaker.h:77
virtual ~Maker()
Definition: WorkerMaker.cc:10
long double T
def template
Definition: svgfig.py:520
virtual std::auto_ptr< Worker > makeWorker(WorkerParams const &p, ModuleDescription const &md) const
Definition: WorkerMaker.h:66