CMS 3D CMS Logo

WorkerT.cc
Go to the documentation of this file.
3 
16 
20 
25 
26 #include <type_traits>
27 
28 namespace edm {
29  namespace workerimpl {
30  template <typename T>
32  static bool constexpr value = false;
33  };
34 
35  template <>
37  static bool constexpr value = true;
38  };
39 
40  template <>
42  static bool constexpr value = true;
43  };
44 
45  template <>
47  static bool constexpr value = true;
48  };
49 
50  template <>
52  static bool constexpr value = true;
53  };
54 
55  template <>
57  static bool constexpr value = true;
58  };
59 
60  template <>
62  static bool constexpr value = true;
63  };
64 
65  template <>
67  static bool constexpr value = true;
68  };
69 
70  template <>
72  static bool constexpr value = true;
73  };
74 
75  template <>
77  static bool constexpr value = true;
78  };
79 
80  struct DoNothing {
81  template <typename... T>
82  inline void operator()(const T&...) {}
83  };
84 
85  template <typename T>
86  struct DoBeginStream {
87  inline void operator()(WorkerT<T>* iWorker, StreamID id) { iWorker->callWorkerBeginStream(0, id); }
88  };
89 
90  template <typename T>
91  struct DoEndStream {
92  inline void operator()(WorkerT<T>* iWorker, StreamID id) { iWorker->callWorkerEndStream(0, id); }
93  };
94 
95  template <typename T, typename P>
97  inline void operator()(
98  WorkerT<T>* iWorker, StreamID id, P const& rp, EventSetupImpl const& c, ModuleCallingContext const* mcc) {
99  iWorker->callWorkerStreamBegin(0, id, rp, c, mcc);
100  }
101  };
102 
103  template <typename T, typename P>
105  inline void operator()(
106  WorkerT<T>* iWorker, StreamID id, P const& rp, EventSetupImpl const& c, ModuleCallingContext const* mcc) {
107  iWorker->callWorkerStreamEnd(0, id, rp, c, mcc);
108  }
109  };
110  } // namespace workerimpl
111 
112  template <typename T>
113  inline WorkerT<T>::WorkerT(std::shared_ptr<T> ed, ModuleDescription const& md, ExceptionToActionTable const* actions)
114  : Worker(md, actions), module_(ed) {
115  assert(module_ != nullptr);
116  }
117 
118  template <typename T>
120 
121  template <typename T>
123  return module_->wantsGlobalRuns();
124  }
125 
126  template <typename T>
128  return module_->wantsGlobalLuminosityBlocks();
129  }
130 
131  template <typename T>
133  return module_->wantsStreamRuns();
134  }
135 
136  template <typename T>
138  return module_->wantsStreamLuminosityBlocks();
139  }
140 
141  template <typename T>
143  return nullptr;
144  }
145  template <typename T>
147  return nullptr;
148  }
149  template <>
151  return module_->globalRunsQueue();
152  }
153  template <>
155  return module_->globalLuminosityBlocksQueue();
156  }
157  template <>
159  return module_->globalRunsQueue();
160  }
161  template <>
163  return module_->globalLuminosityBlocksQueue();
164  }
165  template <>
167  return module_->globalRunsQueue();
168  }
169  template <>
171  return module_->globalLuminosityBlocksQueue();
172  }
173  template <>
175  return module_->globalRunsQueue();
176  }
177  template <>
179  return module_->globalLuminosityBlocksQueue();
180  }
181  //one
182  template <>
184  return module_->globalRunsQueue();
185  }
186  template <>
188  return module_->globalLuminosityBlocksQueue();
189  }
190  template <>
192  return module_->globalRunsQueue();
193  }
194  template <>
196  return module_->globalLuminosityBlocksQueue();
197  }
198  template <>
200  return module_->globalRunsQueue();
201  }
202  template <>
204  return module_->globalLuminosityBlocksQueue();
205  }
206  template <>
208  return module_->globalRunsQueue();
209  }
210  template <>
212  return module_->globalLuminosityBlocksQueue();
213  }
214 
215  template <typename T>
216  inline bool WorkerT<T>::implDo(EventPrincipal const& ep, EventSetupImpl const& c, ModuleCallingContext const* mcc) {
217  std::shared_ptr<Worker> sentry(this, [&ep](Worker* obj) { obj->postDoEvent(ep); });
218  return module_->doEvent(ep, c, activityRegistry(), mcc);
219  }
220 
221  template <typename T>
223  EventSetupImpl const&,
224  ModuleCallingContext const*,
226 
227  template <>
229  EventSetupImpl const& c,
230  ModuleCallingContext const* mcc,
231  WaitingTaskWithArenaHolder& holder) {
232  module_->doAcquire(ep, c, activityRegistry(), mcc, holder);
233  }
234 
235  template <>
237  EventSetupImpl const& c,
238  ModuleCallingContext const* mcc,
239  WaitingTaskWithArenaHolder& holder) {
240  module_->doAcquire(ep, c, activityRegistry(), mcc, holder);
241  }
242 
243  template <>
245  EventSetupImpl const& c,
246  ModuleCallingContext const* mcc,
247  WaitingTaskWithArenaHolder& holder) {
248  module_->doAcquire(ep, c, activityRegistry(), mcc, holder);
249  }
250 
251  template <>
253  EventSetupImpl const& c,
254  ModuleCallingContext const* mcc,
255  WaitingTaskWithArenaHolder& holder) {
256  module_->doAcquire(ep, c, activityRegistry(), mcc, holder);
257  }
258 
259  template <typename T>
261  return false;
262  }
263 
264  template <typename T>
266  EventPrincipal const& ep,
267  ModuleCallingContext const* mcc) {
268  return true;
269  }
270  template <typename T>
271  inline void WorkerT<T>::itemsToGetForSelection(std::vector<ProductResolverIndexAndSkipBit>&) const {}
272 
273  template <>
275  return true;
276  }
277  template <>
279  EventPrincipal const& ep,
280  ModuleCallingContext const* mcc) {
281  return module_->prePrefetchSelection(id, ep, mcc);
282  }
283  template <>
284  inline void WorkerT<OutputModule>::itemsToGetForSelection(std::vector<ProductResolverIndexAndSkipBit>& iItems) const {
285  iItems = module_->productsUsedBySelection();
286  }
287 
288  template <>
290  return true;
291  }
292 
293  template <>
295  EventPrincipal const& ep,
296  ModuleCallingContext const* mcc) {
297  return module_->prePrefetchSelection(id, ep, mcc);
298  }
299  template <>
301  std::vector<ProductResolverIndexAndSkipBit>& iItems) const {
302  iItems = module_->productsUsedBySelection();
303  }
304 
305  template <>
307  return true;
308  }
309  template <>
311  EventPrincipal const& ep,
312  ModuleCallingContext const* mcc) {
313  return module_->prePrefetchSelection(id, ep, mcc);
314  }
315  template <>
317  std::vector<ProductResolverIndexAndSkipBit>& iItems) const {
318  iItems = module_->productsUsedBySelection();
319  }
320 
321  template <>
323  return true;
324  }
325  template <>
327  EventPrincipal const& ep,
328  ModuleCallingContext const* mcc) {
329  return module_->prePrefetchSelection(id, ep, mcc);
330  }
331  template <>
333  std::vector<ProductResolverIndexAndSkipBit>& iItems) const {
334  iItems = module_->productsUsedBySelection();
335  }
336 
337  template <typename T>
338  inline bool WorkerT<T>::implDoBegin(RunPrincipal const& rp,
339  EventSetupImpl const& c,
340  ModuleCallingContext const* mcc) {
341  module_->doBeginRun(rp, c, mcc);
342  return true;
343  }
344 
345  template <typename T>
346  template <typename D>
348  D, StreamID id, RunPrincipal const& rp, EventSetupImpl const& c, ModuleCallingContext const* mcc) {
349  module_->doStreamBeginRun(id, rp, c, mcc);
350  }
351 
352  template <typename T>
353  template <typename D>
355  D, StreamID id, RunPrincipal const& rp, EventSetupImpl const& c, ModuleCallingContext const* mcc) {
356  module_->doStreamEndRun(id, rp, c, mcc);
357  }
358 
359  template <typename T>
361  RunPrincipal const& rp,
362  EventSetupImpl const& c,
363  ModuleCallingContext const* mcc) {
367  might_call;
368  might_call(this, id, rp, c, mcc);
369  return true;
370  }
371 
372  template <typename T>
374  RunPrincipal const& rp,
375  EventSetupImpl const& c,
376  ModuleCallingContext const* mcc) {
380  might_call;
381  might_call(this, id, rp, c, mcc);
382  return true;
383  }
384 
385  template <typename T>
386  inline bool WorkerT<T>::implDoEnd(RunPrincipal const& rp, EventSetupImpl const& c, ModuleCallingContext const* mcc) {
387  module_->doEndRun(rp, c, mcc);
388  return true;
389  }
390 
391  template <typename T>
393  EventSetupImpl const& c,
394  ModuleCallingContext const* mcc) {
395  module_->doBeginLuminosityBlock(lbp, c, mcc);
396  return true;
397  }
398 
399  template <typename T>
400  template <typename D>
402  D, StreamID id, LuminosityBlockPrincipal const& rp, EventSetupImpl const& c, ModuleCallingContext const* mcc) {
403  module_->doStreamBeginLuminosityBlock(id, rp, c, mcc);
404  }
405 
406  template <typename T>
407  template <typename D>
409  D, StreamID id, LuminosityBlockPrincipal const& rp, EventSetupImpl const& c, ModuleCallingContext const* mcc) {
410  module_->doStreamEndLuminosityBlock(id, rp, c, mcc);
411  }
412 
413  template <typename T>
415  LuminosityBlockPrincipal const& lbp,
416  EventSetupImpl const& c,
417  ModuleCallingContext const* mcc) {
421  might_call;
422  might_call(this, id, lbp, c, mcc);
423  return true;
424  }
425 
426  template <typename T>
428  LuminosityBlockPrincipal const& lbp,
429  EventSetupImpl const& c,
430  ModuleCallingContext const* mcc) {
434  might_call;
435  might_call(this, id, lbp, c, mcc);
436 
437  return true;
438  }
439 
440  template <typename T>
442  EventSetupImpl const& c,
443  ModuleCallingContext const* mcc) {
444  module_->doEndLuminosityBlock(lbp, c, mcc);
445  return true;
446  }
447 
448  template <typename T>
450  return module_->workerType();
451  }
452 
453  template <typename T>
454  inline void WorkerT<T>::implBeginJob() {
455  module_->doBeginJob();
456  }
457 
458  template <typename T>
459  inline void WorkerT<T>::implEndJob() {
460  module_->doEndJob();
461  }
462 
463  template <typename T>
464  template <typename D>
466  module_->doBeginStream(id);
467  }
468 
469  template <typename T>
472  might_call;
473  might_call(this, id);
474  }
475 
476  template <typename T>
477  template <typename D>
479  module_->doEndStream(id);
480  }
481 
482  template <typename T>
485  might_call;
486  might_call(this, id);
487  }
488 
489  template <typename T>
491  module_->doRespondToOpenInputFile(fb);
492  }
493 
494  template <typename T>
496  module_->doRespondToCloseInputFile(fb);
497  }
498 
499  template <typename T>
502  module_->doRegisterThinnedAssociations(registry, helper);
503  }
504 
505  template <typename T>
507  return Worker::TaskQueueAdaptor{};
508  }
509  template <>
511  return &(module_->sharedResourcesAcquirer().serialQueueChain());
512  }
513  template <>
515  return &(module_->sharedResourcesAcquirer().serialQueueChain());
516  }
517  template <>
519  return &(module_->sharedResourcesAcquirer().serialQueueChain());
520  }
521  template <>
523  return &(module_->sharedResourcesAcquirer().serialQueueChain());
524  }
525  template <>
527  return &(module_->sharedResourcesAcquirer().serialQueueChain());
528  }
529  template <>
531  return &(module_->sharedResourcesAcquirer().serialQueueChain());
532  }
533  template <>
535  return &(module_->sharedResourcesAcquirer().serialQueueChain());
536  }
537  template <>
539  return &(module_->sharedResourcesAcquirer().serialQueueChain());
540  }
541  template <>
543  return &(module_->queue());
544  }
545  template <>
547  return &(module_->queue());
548  }
549  template <>
551  return &(module_->queue());
552  }
553  template <>
555  return &(module_->queue());
556  }
557 
558  namespace {
559  template <typename T>
560  bool mustPrefetchMayGet();
561 
562  template <>
563  bool mustPrefetchMayGet<EDAnalyzer>() {
564  return true;
565  }
566  template <>
567  bool mustPrefetchMayGet<EDProducer>() {
568  return true;
569  }
570  template <>
571  bool mustPrefetchMayGet<EDFilter>() {
572  return true;
573  }
574  template <>
575  bool mustPrefetchMayGet<OutputModule>() {
576  return true;
577  }
578 
579  template <>
580  bool mustPrefetchMayGet<edm::one::EDProducerBase>() {
581  return true;
582  }
583  template <>
584  bool mustPrefetchMayGet<edm::one::EDFilterBase>() {
585  return true;
586  }
587  template <>
588  bool mustPrefetchMayGet<edm::one::EDAnalyzerBase>() {
589  return true;
590  }
591  template <>
592  bool mustPrefetchMayGet<edm::one::OutputModuleBase>() {
593  return true;
594  }
595 
596  template <>
597  bool mustPrefetchMayGet<edm::global::EDProducerBase>() {
598  return true;
599  }
600  template <>
601  bool mustPrefetchMayGet<edm::global::EDFilterBase>() {
602  return true;
603  }
604  template <>
605  bool mustPrefetchMayGet<edm::global::EDAnalyzerBase>() {
606  return true;
607  }
608  template <>
609  bool mustPrefetchMayGet<edm::global::OutputModuleBase>() {
610  return true;
611  }
612 
613  template <>
614  bool mustPrefetchMayGet<edm::limited::EDProducerBase>() {
615  return true;
616  }
617  template <>
618  bool mustPrefetchMayGet<edm::limited::EDFilterBase>() {
619  return true;
620  }
621  template <>
622  bool mustPrefetchMayGet<edm::limited::EDAnalyzerBase>() {
623  return true;
624  }
625  template <>
626  bool mustPrefetchMayGet<edm::limited::OutputModuleBase>() {
627  return true;
628  }
629 
630  template <>
631  bool mustPrefetchMayGet<edm::stream::EDProducerAdaptorBase>() {
632  return true;
633  }
634  template <>
635  bool mustPrefetchMayGet<edm::stream::EDFilterAdaptorBase>() {
636  return true;
637  }
638  template <>
639  bool mustPrefetchMayGet<edm::stream::EDAnalyzerAdaptorBase>() {
640  return true;
641  }
642 
643  } // namespace
644 
645  template <typename T>
647  module_->updateLookup(iBranchType, iHelper, mustPrefetchMayGet<T>());
648  }
649 
650  template <typename T>
652  module_->updateLookup(iPI);
653  }
654 
655  namespace {
656  using ModuleToResolverIndicies =
657  std::unordered_multimap<std::string, std::tuple<edm::TypeID const*, const char*, edm::ProductResolverIndex>>;
658  void resolvePutIndiciesImpl(void*,
659  BranchType iBranchType,
660  ModuleToResolverIndicies const& iIndicies,
661  std::string const& iModuleLabel) {
662  //Do nothing
663  }
664 
665  void resolvePutIndiciesImpl(ProducerBase* iProd,
666  BranchType iBranchType,
667  ModuleToResolverIndicies const& iIndicies,
668  std::string const& iModuleLabel) {
669  iProd->resolvePutIndicies(iBranchType, iIndicies, iModuleLabel);
670  }
671 
672  void resolvePutIndiciesImpl(edm::stream::EDProducerAdaptorBase* iProd,
673  BranchType iBranchType,
674  ModuleToResolverIndicies const& iIndicies,
675  std::string const& iModuleLabel) {
676  iProd->resolvePutIndicies(iBranchType, iIndicies, iModuleLabel);
677  }
678  void resolvePutIndiciesImpl(edm::stream::EDFilterAdaptorBase* iProd,
679  BranchType iBranchType,
680  ModuleToResolverIndicies const& iIndicies,
681  std::string const& iModuleLabel) {
682  iProd->resolvePutIndicies(iBranchType, iIndicies, iModuleLabel);
683  }
684 
685  std::vector<ProductResolverIndex> s_emptyIndexList;
686 
687  std::vector<ProductResolverIndex> const& itemsShouldPutInEventImpl(void const*) { return s_emptyIndexList; }
688 
689  std::vector<ProductResolverIndex> const& itemsShouldPutInEventImpl(ProducerBase const* iProd) {
690  return iProd->indiciesForPutProducts(edm::InEvent);
691  }
692 
693  std::vector<ProductResolverIndex> const& itemsShouldPutInEventImpl(edm::stream::EDProducerAdaptorBase const* iProd) {
694  return iProd->indiciesForPutProducts(edm::InEvent);
695  }
696 
697  std::vector<ProductResolverIndex> const& itemsShouldPutInEventImpl(edm::stream::EDFilterAdaptorBase const* iProd) {
698  return iProd->indiciesForPutProducts(edm::InEvent);
699  }
700 
701  } // namespace
702 
703  template <typename T>
705  BranchType iBranchType,
706  std::unordered_multimap<std::string, std::tuple<TypeID const*, const char*, edm::ProductResolverIndex>> const&
707  iIndicies) {
708  resolvePutIndiciesImpl(&module(), iBranchType, iIndicies, description().moduleLabel());
709  }
710 
711  template <typename T>
712  std::vector<ProductResolverIndex> const& WorkerT<T>::itemsShouldPutInEvent() const {
713  return itemsShouldPutInEventImpl(&module());
714  }
715 
716  template <>
718  return Worker::kAnalyzer;
719  }
720  template <>
722  return Worker::kProducer;
723  }
724  template <>
726  return Worker::kFilter;
727  }
728  template <>
730  return Worker::kOutputModule;
731  }
732  template <>
734  return Worker::kProducer;
735  }
736  template <>
738  return Worker::kFilter;
739  }
740  template <>
742  return Worker::kAnalyzer;
743  }
744  template <>
746  return Worker::kOutputModule;
747  }
748 
749  template <>
751  return Worker::kProducer;
752  }
753  template <>
755  return Worker::kFilter;
756  }
757  template <>
759  return Worker::kAnalyzer;
760  }
761  template <>
763  return Worker::kOutputModule;
764  }
765 
766  template <>
768  return Worker::kProducer;
769  }
770  template <>
772  return Worker::kFilter;
773  }
774  template <>
776  return Worker::kAnalyzer;
777  }
778  template <>
780  return Worker::kOutputModule;
781  }
782 
783  template <>
785  return Worker::kProducer;
786  }
787  template <>
789  return Worker::kFilter;
790  }
791  template <>
793  return Worker::kAnalyzer;
794  }
795 
796  //Explicitly instantiate our needed templates to avoid having the compiler
797  // instantiate them in all of our libraries
798  template class WorkerT<EDProducer>;
799  template class WorkerT<EDFilter>;
800  template class WorkerT<EDAnalyzer>;
801  template class WorkerT<OutputModule>;
802  template class WorkerT<one::EDProducerBase>;
803  template class WorkerT<one::EDFilterBase>;
804  template class WorkerT<one::EDAnalyzerBase>;
805  template class WorkerT<one::OutputModuleBase>;
806  template class WorkerT<global::EDProducerBase>;
807  template class WorkerT<global::EDFilterBase>;
808  template class WorkerT<global::EDAnalyzerBase>;
809  template class WorkerT<global::OutputModuleBase>;
813  template class WorkerT<limited::EDProducerBase>;
814  template class WorkerT<limited::EDFilterBase>;
815  template class WorkerT<limited::EDAnalyzerBase>;
816  template class WorkerT<limited::OutputModuleBase>;
817 } // namespace edm
void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const &) final
Definition: WorkerT.cc:646
static const char module_[]
bool wantsStreamLuminosityBlocks() const final
Definition: WorkerT.cc:137
bool implDoEnd(RunPrincipal const &rp, EventSetupImpl const &c, ModuleCallingContext const *mcc) override
Definition: WorkerT.cc:386
ModuleDescription const & description() const
Definition: Worker.h:190
SerialTaskQueue * globalRunsQueue() final
Definition: WorkerT.cc:142
Definition: helper.py:1
roAction_t actions[nactions]
Definition: GenABIO.cc:181
bool implDoBegin(RunPrincipal const &rp, EventSetupImpl const &c, ModuleCallingContext const *mcc) override
Definition: WorkerT.cc:338
void operator()(WorkerT< T > *iWorker, StreamID id, P const &rp, EventSetupImpl const &c, ModuleCallingContext const *mcc)
Definition: WorkerT.cc:97
SerialTaskQueue * globalLuminosityBlocksQueue() final
Definition: WorkerT.cc:146
void implEndJob() override
Definition: WorkerT.cc:459
bool wantsGlobalRuns() const final
Definition: WorkerT.cc:122
bool implDoStreamEnd(StreamID id, RunPrincipal const &rp, EventSetupImpl const &c, ModuleCallingContext const *mcc) override
Definition: WorkerT.cc:373
T & module()
Definition: WorkerT.h:79
ActivityRegistry * activityRegistry()
Definition: Worker.h:284
BranchType
Definition: BranchType.h:11
Types moduleType() const override
void resolvePutIndicies(BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
Definition: ProducerBase.cc:79
edm::propagate_const< std::shared_ptr< T > > module_
Definition: WorkerT.h:165
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts(BranchType iBranchType) const
Definition: ProducerBase.h:89
void operator()(WorkerT< T > *iWorker, StreamID id, P const &rp, EventSetupImpl const &c, ModuleCallingContext const *mcc)
Definition: WorkerT.cc:105
void callWorkerStreamBegin(D, StreamID id, RunPrincipal const &rp, EventSetupImpl const &c, ModuleCallingContext const *mcc)
Definition: WorkerT.cc:347
void implRespondToOpenInputFile(FileBlock const &fb) override
Definition: WorkerT.cc:490
bool implDoStreamBegin(StreamID id, RunPrincipal const &rp, EventSetupImpl const &c, ModuleCallingContext const *mcc) override
Definition: WorkerT.cc:360
void callWorkerStreamEnd(D, StreamID id, RunPrincipal const &rp, EventSetupImpl const &c, ModuleCallingContext const *mcc)
Definition: WorkerT.cc:354
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts(BranchType iBranchType) const
bool implDoPrePrefetchSelection(StreamID id, EventPrincipal const &ep, ModuleCallingContext const *mcc) override
Definition: WorkerT.cc:265
bool wantsGlobalLuminosityBlocks() const final
Definition: WorkerT.cc:127
void callWorkerEndStream(D, StreamID)
Definition: WorkerT.cc:478
void operator()(WorkerT< T > *iWorker, StreamID id)
Definition: WorkerT.cc:87
void operator()(const T &...)
Definition: WorkerT.cc:82
void implBeginStream(StreamID) override
Definition: WorkerT.cc:470
void resolvePutIndicies(BranchType iBranchType, std::unordered_multimap< std::string, std::tuple< TypeID const *, const char *, edm::ProductResolverIndex >> const &iIndicies) final
Definition: WorkerT.cc:704
Definition: value.py:1
TaskQueueAdaptor serializeRunModule() override
Definition: WorkerT.cc:506
void operator()(WorkerT< T > *iWorker, StreamID id)
Definition: WorkerT.cc:92
~WorkerT() override
Definition: WorkerT.cc:119
std::vector< ProductResolverIndex > const & itemsShouldPutInEvent() const override
Definition: WorkerT.cc:712
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:141
bool implNeedToRunSelection() const final
Definition: WorkerT.cc:260
void implDoAcquire(EventPrincipal const &ep, EventSetupImpl const &c, ModuleCallingContext const *mcc, WaitingTaskWithArenaHolder &holder) final
Definition: WorkerT.cc:222
void implEndStream(StreamID) override
Definition: WorkerT.cc:483
void implBeginJob() override
Definition: WorkerT.cc:454
void implRespondToCloseInputFile(FileBlock const &fb) override
Definition: WorkerT.cc:495
std::pair< OmniClusterRef, TrackingParticleRef > P
void resolvePutIndicies(BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
void callWorkerBeginStream(D, StreamID)
Definition: WorkerT.cc:465
HLT enums.
void itemsToGetForSelection(std::vector< ProductResolverIndexAndSkipBit > &) const final
Definition: WorkerT.cc:271
bool implDo(EventPrincipal const &ep, EventSetupImpl const &c, ModuleCallingContext const *mcc) override
Definition: WorkerT.cc:216
void postDoEvent(EventPrincipal const &)
Definition: Worker.cc:368
void implRegisterThinnedAssociations(ProductRegistry const &, ThinnedAssociationsHelper &) override
Definition: WorkerT.cc:500
bool wantsStreamRuns() const final
Definition: WorkerT.cc:132
long double T
std::string workerType() const override
Definition: WorkerT.cc:449
WorkerT(std::shared_ptr< T >, ModuleDescription const &, ExceptionToActionTable const *actions)
Definition: WorkerT.cc:113
#define constexpr