CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
WorkerT.h
Go to the documentation of this file.
1 #ifndef FWCore_Framework_WorkerT_h
2 #define FWCore_Framework_WorkerT_h
3 
4 /*----------------------------------------------------------------------
5 
6 WorkerT: Code common to all workers.
7 
8 ----------------------------------------------------------------------*/
9 
15 
16 #include <memory>
17 
18 namespace edm {
19 
20  template<typename T>
21  class WorkerT : public Worker {
22  public:
23  typedef T ModuleType;
25  WorkerT(std::auto_ptr<T>,
26  ModuleDescription const&,
27  WorkerParams const&);
28 
29  virtual ~WorkerT();
30 
31  template<typename ModType>
32  static std::auto_ptr<T> makeModule(ModuleDescription const&,
33  ParameterSet const& pset) {
34  std::auto_ptr<ModType> module = std::auto_ptr<ModType>(new ModType(pset));
35  return std::auto_ptr<T>(module.release());
36  }
37 
38  void setModule( std::auto_ptr<T>& iModule) {
39  module_ = iModule;
40  module_->setModuleDescription(description());
41 
42  }
43 
44  void setEventSelectionInfo(std::map<std::string, std::vector<std::pair<std::string, int> > > const& outputModulePathPositions,
45  bool anyProductProduced) {
46  module_->setEventSelectionInfo(outputModulePathPositions, anyProductProduced);
47  }
48 
49  protected:
50  T& module() {return *module_;}
51  T const& module() const {return *module_;}
52 
53  private:
54  virtual bool implDoBegin(EventPrincipal& ep, EventSetup const& c,
55  CurrentProcessingContext const* cpc);
56  virtual bool implDoEnd(EventPrincipal& ep, EventSetup const& c,
57  CurrentProcessingContext const* cpc);
58  virtual bool implDoBegin(RunPrincipal& rp, EventSetup const& c,
59  CurrentProcessingContext const* cpc);
60  virtual bool implDoEnd(RunPrincipal& rp, EventSetup const& c,
61  CurrentProcessingContext const* cpc);
62  virtual bool implDoBegin(LuminosityBlockPrincipal& lbp, EventSetup const& c,
63  CurrentProcessingContext const* cpc);
64  virtual bool implDoEnd(LuminosityBlockPrincipal& lbp, EventSetup const& c,
65  CurrentProcessingContext const* cpc);
66  virtual void implBeginJob() ;
67  virtual void implEndJob() ;
68  virtual void implRespondToOpenInputFile(FileBlock const& fb);
69  virtual void implRespondToCloseInputFile(FileBlock const& fb);
70  virtual void implRespondToOpenOutputFiles(FileBlock const& fb);
71  virtual void implRespondToCloseOutputFiles(FileBlock const& fb);
72  virtual void implPreForkReleaseResources();
73  virtual void implPostForkReacquireResources(unsigned int iChildIndex,
74  unsigned int iNumberOfChildren);
75  virtual std::string workerType() const;
76 
77  std::auto_ptr<T> module_;
78  };
79 
80  template<typename T>
81  inline
82  WorkerT<T>::WorkerT(std::auto_ptr<T> ed, ModuleDescription const& md, WorkerParams const& wp) :
83  Worker(md, wp),
84  module_(ed) {
85  assert(module_.get() != 0);
86  module_->setModuleDescription(md);
87  module_->registerAnyProducts(module_.get(), wp.reg_);
88  }
89 
90  template<typename T>
92  }
93 
94  template<typename T>
95  bool
98  boost::shared_ptr<Worker> sentry(this,[&ep](Worker* obj) {obj->postDoEvent(ep);});
99  return module_->doEvent(ep, c, cpc);
100  }
101 
102  template<typename T>
103  bool
105  return false;
106  }
107 
108  template<typename T>
109  bool
111  return module_->doBeginRun(rp, c, cpc);
112  }
113 
114  template<typename T>
115  bool
117  return module_->doEndRun(rp, c, cpc);
118  }
119 
120  template<typename T>
121  bool
123  return module_->doBeginLuminosityBlock(lbp, c, cpc);
124  }
125 
126  template<typename T>
127  bool
129  return module_->doEndLuminosityBlock(lbp, c, cpc);
130  }
131 
132  template<typename T>
133  std::string
135  return module_->workerType();
136  }
137 
138  template<typename T>
139  void
141  module_->doBeginJob();
142  }
143 
144  template<typename T>
145  void
147  module_->doEndJob();
148  }
149 
150  template<typename T>
151  void
153  module_->doRespondToOpenInputFile(fb);
154  }
155 
156  template<typename T>
157  void
159  module_->doRespondToCloseInputFile(fb);
160  }
161 
162  template<typename T>
163  void
165  module_->doRespondToOpenOutputFiles(fb);
166  }
167 
168  template<typename T>
169  void
171  module_->doRespondToCloseOutputFiles(fb);
172  }
173 
174  template<typename T>
175  void
177  module_->doPreForkReleaseResources();
178  }
179 
180  template<typename T>
181  void
183  unsigned int iNumberOfChildren) {
184  module_->doPostForkReacquireResources(iChildIndex, iNumberOfChildren);
185  }
186 }
187 
188 #endif
static const char module_[]
virtual bool implDoEnd(EventPrincipal &ep, EventSetup const &c, CurrentProcessingContext const *cpc)
Definition: WorkerT.h:104
ModuleDescription const & description() const
Definition: Worker.h:73
std::auto_ptr< T > module_
Definition: WorkerT.h:77
virtual void implRespondToOpenOutputFiles(FileBlock const &fb)
Definition: WorkerT.h:164
virtual void implBeginJob()
Definition: WorkerT.h:140
T & module()
Definition: WorkerT.h:50
virtual void implRespondToOpenInputFile(FileBlock const &fb)
Definition: WorkerT.h:152
T const & module() const
Definition: WorkerT.h:51
virtual ~WorkerT()
Definition: WorkerT.h:91
dictionary map
Definition: Association.py:205
boost::shared_ptr< UnscheduledHandler > unscheduledHandler() const
virtual bool implDoBegin(EventPrincipal &ep, EventSetup const &c, CurrentProcessingContext const *cpc)
Definition: WorkerT.h:96
void setEventSelectionInfo(std::map< std::string, std::vector< std::pair< std::string, int > > > const &outputModulePathPositions, bool anyProductProduced)
Definition: WorkerT.h:44
ProductRegistry * reg_
Definition: WorkerParams.h:39
void setModule(std::auto_ptr< T > &iModule)
Definition: WorkerT.h:38
virtual void implPreForkReleaseResources()
Definition: WorkerT.h:176
virtual void implPostForkReacquireResources(unsigned int iChildIndex, unsigned int iNumberOfChildren)
Definition: WorkerT.h:182
void postDoEvent(EventPrincipal &)
Definition: Worker.cc:125
T ModuleType
Definition: WorkerT.h:23
WorkerT< T > WorkerType
Definition: WorkerT.h:24
WorkerT(std::auto_ptr< T >, ModuleDescription const &, WorkerParams const &)
Definition: WorkerT.h:82
virtual void implEndJob()
Definition: WorkerT.h:146
virtual std::string workerType() const
Definition: WorkerT.h:134
virtual void implRespondToCloseInputFile(FileBlock const &fb)
Definition: WorkerT.h:158
long double T
Definition: vlib.h:209
static std::auto_ptr< T > makeModule(ModuleDescription const &, ParameterSet const &pset)
Definition: WorkerT.h:32
virtual void implRespondToCloseOutputFiles(FileBlock const &fb)
Definition: WorkerT.h:170