CMS 3D CMS Logo

WorkerT.cc
Go to the documentation of this file.
3 
15 
19 
24 
25 #include <type_traits>
26 
27 namespace edm {
28  namespace workerimpl {
29  template <typename T>
31  static bool constexpr value = false;
32  };
33 
34  template <>
36  static bool constexpr value = true;
37  };
38 
39  template <>
41  static bool constexpr value = true;
42  };
43 
44  template <>
46  static bool constexpr value = true;
47  };
48 
49  template <>
51  static bool constexpr value = true;
52  };
53 
54  template <>
56  static bool constexpr value = true;
57  };
58 
59  template <>
61  static bool constexpr value = true;
62  };
63 
64  template <>
66  static bool constexpr value = true;
67  };
68 
69  template <>
71  static bool constexpr value = true;
72  };
73 
74  template <>
76  static bool constexpr value = true;
77  };
78 
79  template <typename T>
81  static bool constexpr value = false;
82  };
83 
84  template <>
86  static bool constexpr value = true;
87  };
88 
89  struct DoNothing {
90  template <typename... T>
91  inline void operator()(const T&...) {}
92  };
93 
94  template <typename T>
95  struct DoBeginStream {
96  inline void operator()(WorkerT<T>* iWorker, StreamID id) { iWorker->callWorkerBeginStream(0, id); }
97  };
98 
99  template <typename T>
100  struct DoEndStream {
101  inline void operator()(WorkerT<T>* iWorker, StreamID id) { iWorker->callWorkerEndStream(0, id); }
102  };
103 
104  template <typename T, typename INFOTYPE>
106  inline void operator()(WorkerT<T>* iWorker, StreamID id, INFOTYPE const& info, ModuleCallingContext const* mcc) {
107  iWorker->callWorkerStreamBegin(0, id, info, mcc);
108  }
109  };
110 
111  template <typename T, typename INFOTYPE>
113  inline void operator()(WorkerT<T>* iWorker, StreamID id, INFOTYPE const& info, ModuleCallingContext const* mcc) {
114  iWorker->callWorkerStreamEnd(0, id, info, mcc);
115  }
116  };
117  } // namespace workerimpl
118 
119  template <typename T>
120  inline WorkerT<T>::WorkerT(std::shared_ptr<T> ed, ModuleDescription const& md, ExceptionToActionTable const* actions)
121  : Worker(md, actions), module_(ed) {
122  assert(module_ != nullptr);
123  }
124 
125  template <typename T>
127 
128  template <typename T>
130  return module_->wantsProcessBlocks();
131  }
132 
133  template <typename T>
135  return module_->wantsInputProcessBlocks();
136  }
137 
138  template <typename T>
140  return module_->wantsGlobalRuns();
141  }
142 
143  template <typename T>
145  return module_->wantsGlobalLuminosityBlocks();
146  }
147 
148  template <typename T>
150  return module_->wantsStreamRuns();
151  }
152 
153  template <typename T>
155  return module_->wantsStreamLuminosityBlocks();
156  }
157 
158  template <typename T>
160  return nullptr;
161  }
162  template <typename T>
164  return nullptr;
165  }
166  template <>
168  return module_->globalRunsQueue();
169  }
170  template <>
172  return module_->globalLuminosityBlocksQueue();
173  }
174  template <>
176  return module_->globalRunsQueue();
177  }
178  template <>
180  return module_->globalLuminosityBlocksQueue();
181  }
182  template <>
184  return module_->globalRunsQueue();
185  }
186  template <>
188  return module_->globalLuminosityBlocksQueue();
189  }
190  //one
191  template <>
193  return module_->globalRunsQueue();
194  }
195  template <>
197  return module_->globalLuminosityBlocksQueue();
198  }
199  template <>
201  return module_->globalRunsQueue();
202  }
203  template <>
205  return module_->globalLuminosityBlocksQueue();
206  }
207  template <>
209  return module_->globalRunsQueue();
210  }
211  template <>
213  return module_->globalLuminosityBlocksQueue();
214  }
215  template <>
217  return module_->globalRunsQueue();
218  }
219  template <>
221  return module_->globalLuminosityBlocksQueue();
222  }
223 
224  template <typename T>
226  EventPrincipal const& ep = info.principal();
227  std::shared_ptr<Worker> sentry(this, [&ep](Worker* obj) { obj->postDoEvent(ep); });
228  return module_->doEvent(info, activityRegistry(), mcc);
229  }
230 
231  template <typename T>
233  ModuleCallingContext const*,
235 
236  template <>
238  ModuleCallingContext const* mcc,
239  WaitingTaskWithArenaHolder& holder) {
240  module_->doAcquire(info, activityRegistry(), mcc, holder);
241  }
242 
243  template <>
245  ModuleCallingContext const* mcc,
246  WaitingTaskWithArenaHolder& holder) {
247  module_->doAcquire(info, activityRegistry(), mcc, holder);
248  }
249 
250  template <>
252  ModuleCallingContext const* mcc,
253  WaitingTaskWithArenaHolder& holder) {
254  module_->doAcquire(info, activityRegistry(), mcc, holder);
255  }
256 
257  template <>
259  ModuleCallingContext const* mcc,
260  WaitingTaskWithArenaHolder& holder) {
261  module_->doAcquire(info, activityRegistry(), mcc, holder);
262  }
263 
264  template <>
266  ModuleCallingContext const* mcc,
267  WaitingTaskWithArenaHolder& holder) {
268  module_->doAcquire(info, activityRegistry(), mcc, holder);
269  }
270 
271  template <typename T>
273  return false;
274  }
275 
276  template <typename T>
278  EventPrincipal const& ep,
279  ModuleCallingContext const* mcc) {
280  return true;
281  }
282  template <typename T>
283  inline void WorkerT<T>::itemsToGetForSelection(std::vector<ProductResolverIndexAndSkipBit>&) const {}
284 
285  template <>
287  return true;
288  }
289 
290  template <>
292  EventPrincipal const& ep,
293  ModuleCallingContext const* mcc) {
294  return module_->prePrefetchSelection(id, ep, mcc);
295  }
296  template <>
298  std::vector<ProductResolverIndexAndSkipBit>& iItems) const {
299  iItems = module_->productsUsedBySelection();
300  }
301 
302  template <>
304  return true;
305  }
306  template <>
308  EventPrincipal const& ep,
309  ModuleCallingContext const* mcc) {
310  return module_->prePrefetchSelection(id, ep, mcc);
311  }
312  template <>
314  std::vector<ProductResolverIndexAndSkipBit>& iItems) const {
315  iItems = module_->productsUsedBySelection();
316  }
317 
318  template <>
320  return true;
321  }
322  template <>
324  EventPrincipal const& ep,
325  ModuleCallingContext const* mcc) {
326  return module_->prePrefetchSelection(id, ep, mcc);
327  }
328  template <>
330  std::vector<ProductResolverIndexAndSkipBit>& iItems) const {
331  iItems = module_->productsUsedBySelection();
332  }
333 
334  template <typename T>
336  module_->doBeginProcessBlock(pbp, mcc);
337  return true;
338  }
339 
340  template <typename T>
342  module_->doAccessInputProcessBlock(pbp, mcc);
343  return true;
344  }
345 
346  template <typename T>
348  module_->doEndProcessBlock(pbp, mcc);
349  return true;
350  }
351 
352  template <typename T>
354  module_->doBeginRun(info, mcc);
355  return true;
356  }
357 
358  template <typename T>
359  template <typename D>
361  StreamID id,
362  RunTransitionInfo const& info,
363  ModuleCallingContext const* mcc) {
364  module_->doStreamBeginRun(id, info, mcc);
365  }
366 
367  template <typename T>
368  template <typename D>
370  module_->doStreamEndRun(id, info, mcc);
371  }
372 
373  template <typename T>
375  RunTransitionInfo const& info,
376  ModuleCallingContext const* mcc) {
380  might_call;
381  might_call(this, id, info, mcc);
382  return true;
383  }
384 
385  template <typename T>
390  might_call;
391  might_call(this, id, info, mcc);
392  return true;
393  }
394 
395  template <typename T>
397  module_->doEndRun(info, mcc);
398  return true;
399  }
400 
401  template <typename T>
403  module_->doBeginLuminosityBlock(info, mcc);
404  return true;
405  }
406 
407  template <typename T>
408  template <typename D>
410  StreamID id,
411  LumiTransitionInfo const& info,
412  ModuleCallingContext const* mcc) {
413  module_->doStreamBeginLuminosityBlock(id, info, mcc);
414  }
415 
416  template <typename T>
417  template <typename D>
419  module_->doStreamEndLuminosityBlock(id, info, mcc);
420  }
421 
422  template <typename T>
424  LumiTransitionInfo const& info,
425  ModuleCallingContext const* mcc) {
429  might_call;
430  might_call(this, id, info, mcc);
431  return true;
432  }
433 
434  template <typename T>
436  LumiTransitionInfo const& info,
437  ModuleCallingContext const* mcc) {
441  might_call;
442  might_call(this, id, info, mcc);
443 
444  return true;
445  }
446 
447  template <typename T>
449  module_->doEndLuminosityBlock(info, mcc);
450  return true;
451  }
452 
453  template <typename T>
455  return module_->workerType();
456  }
457 
458  template <typename T>
459  inline void WorkerT<T>::implBeginJob() {
460  module_->doBeginJob();
461  }
462 
463  template <typename T>
464  inline void WorkerT<T>::implEndJob() {
465  module_->doEndJob();
466  }
467 
468  template <typename T>
469  template <typename D>
471  module_->doBeginStream(id);
472  }
473 
474  template <typename T>
480  might_call;
481  might_call(this, id);
482  }
483 
484  template <typename T>
485  template <typename D>
487  module_->doEndStream(id);
488  }
489 
490  template <typename T>
496  might_call;
497  might_call(this, id);
498  }
499 
500  template <typename T>
502  module_->doRespondToOpenInputFile(fb);
503  }
504 
505  template <typename T>
507  module_->doRespondToCloseInputFile(fb);
508  }
509 
510  template <typename T>
512  module_->doRespondToCloseOutputFile();
513  }
514 
515  template <typename T>
518  module_->doRegisterThinnedAssociations(registry, helper);
519  }
520 
521  template <typename T>
523  return Worker::TaskQueueAdaptor{};
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_->sharedResourcesAcquirer().serialQueueChain());
544  }
545  template <>
547  return &(module_->sharedResourcesAcquirer().serialQueueChain());
548  }
549  template <>
551  return &(module_->sharedResourcesAcquirer().serialQueueChain());
552  }
553  template <>
555  return &(module_->queue());
556  }
557  template <>
559  return &(module_->queue());
560  }
561  template <>
563  return &(module_->queue());
564  }
565  template <>
567  return &(module_->queue());
568  }
569 
570  namespace {
571  template <typename T>
572  bool mustPrefetchMayGet();
573 
574  template <>
575  bool mustPrefetchMayGet<EDAnalyzer>() {
576  return true;
577  }
578  template <>
579  bool mustPrefetchMayGet<EDProducer>() {
580  return true;
581  }
582  template <>
583  bool mustPrefetchMayGet<EDFilter>() {
584  return true;
585  }
586 
587  template <>
588  bool mustPrefetchMayGet<edm::one::EDProducerBase>() {
589  return true;
590  }
591  template <>
592  bool mustPrefetchMayGet<edm::one::EDFilterBase>() {
593  return true;
594  }
595  template <>
596  bool mustPrefetchMayGet<edm::one::EDAnalyzerBase>() {
597  return true;
598  }
599  template <>
600  bool mustPrefetchMayGet<edm::one::OutputModuleBase>() {
601  return true;
602  }
603 
604  template <>
605  bool mustPrefetchMayGet<edm::global::EDProducerBase>() {
606  return true;
607  }
608  template <>
609  bool mustPrefetchMayGet<edm::global::EDFilterBase>() {
610  return true;
611  }
612  template <>
613  bool mustPrefetchMayGet<edm::global::EDAnalyzerBase>() {
614  return true;
615  }
616  template <>
617  bool mustPrefetchMayGet<edm::global::OutputModuleBase>() {
618  return true;
619  }
620 
621  template <>
622  bool mustPrefetchMayGet<edm::limited::EDProducerBase>() {
623  return true;
624  }
625  template <>
626  bool mustPrefetchMayGet<edm::limited::EDFilterBase>() {
627  return true;
628  }
629  template <>
630  bool mustPrefetchMayGet<edm::limited::EDAnalyzerBase>() {
631  return true;
632  }
633  template <>
634  bool mustPrefetchMayGet<edm::limited::OutputModuleBase>() {
635  return true;
636  }
637 
638  template <>
639  bool mustPrefetchMayGet<edm::stream::EDProducerAdaptorBase>() {
640  return true;
641  }
642  template <>
643  bool mustPrefetchMayGet<edm::stream::EDFilterAdaptorBase>() {
644  return true;
645  }
646  template <>
647  bool mustPrefetchMayGet<edm::stream::EDAnalyzerAdaptorBase>() {
648  return true;
649  }
650 
651  } // namespace
652 
653  template <typename T>
655  module_->updateLookup(iBranchType, iHelper, mustPrefetchMayGet<T>());
656  }
657 
658  template <typename T>
660  module_->updateLookup(iPI);
661  }
662 
663  template <typename T>
665  ProcessBlockHelperBase const& processBlockHelperBase) {
666  module_->selectInputProcessBlocks(productRegistry, processBlockHelperBase);
667  }
668 
669  namespace {
670  using ModuleToResolverIndicies =
671  std::unordered_multimap<std::string, std::tuple<edm::TypeID const*, const char*, edm::ProductResolverIndex>>;
672  void resolvePutIndiciesImpl(void*,
673  BranchType iBranchType,
674  ModuleToResolverIndicies const& iIndicies,
675  std::string const& iModuleLabel) {
676  //Do nothing
677  }
678 
679  void resolvePutIndiciesImpl(ProducerBase* iProd,
680  BranchType iBranchType,
681  ModuleToResolverIndicies const& iIndicies,
682  std::string const& iModuleLabel) {
683  iProd->resolvePutIndicies(iBranchType, iIndicies, iModuleLabel);
684  }
685 
686  void resolvePutIndiciesImpl(edm::stream::EDProducerAdaptorBase* iProd,
687  BranchType iBranchType,
688  ModuleToResolverIndicies const& iIndicies,
689  std::string const& iModuleLabel) {
690  iProd->resolvePutIndicies(iBranchType, iIndicies, iModuleLabel);
691  }
692  void resolvePutIndiciesImpl(edm::stream::EDFilterAdaptorBase* iProd,
693  BranchType iBranchType,
694  ModuleToResolverIndicies const& iIndicies,
695  std::string const& iModuleLabel) {
696  iProd->resolvePutIndicies(iBranchType, iIndicies, iModuleLabel);
697  }
698 
699  std::vector<ProductResolverIndex> s_emptyIndexList;
700 
701  std::vector<ProductResolverIndex> const& itemsShouldPutInEventImpl(void const*) { return s_emptyIndexList; }
702 
703  std::vector<ProductResolverIndex> const& itemsShouldPutInEventImpl(ProducerBase const* iProd) {
704  return iProd->indiciesForPutProducts(edm::InEvent);
705  }
706 
707  std::vector<ProductResolverIndex> const& itemsShouldPutInEventImpl(edm::stream::EDProducerAdaptorBase const* iProd) {
708  return iProd->indiciesForPutProducts(edm::InEvent);
709  }
710 
711  std::vector<ProductResolverIndex> const& itemsShouldPutInEventImpl(edm::stream::EDFilterAdaptorBase const* iProd) {
712  return iProd->indiciesForPutProducts(edm::InEvent);
713  }
714 
715  } // namespace
716 
717  template <typename T>
719  BranchType iBranchType,
720  std::unordered_multimap<std::string, std::tuple<TypeID const*, const char*, edm::ProductResolverIndex>> const&
721  iIndicies) {
722  resolvePutIndiciesImpl(&module(), iBranchType, iIndicies, description()->moduleLabel());
723  }
724 
725  template <typename T>
726  std::vector<ProductResolverIndex> const& WorkerT<T>::itemsShouldPutInEvent() const {
727  return itemsShouldPutInEventImpl(&module());
728  }
729 
730  template <>
732  return Worker::kAnalyzer;
733  }
734  template <>
736  return Worker::kProducer;
737  }
738  template <>
740  return Worker::kFilter;
741  }
742  template <>
744  return Worker::kProducer;
745  }
746  template <>
748  return Worker::kFilter;
749  }
750  template <>
752  return Worker::kAnalyzer;
753  }
754  template <>
756  return Worker::kOutputModule;
757  }
758 
759  template <>
761  return Worker::kProducer;
762  }
763  template <>
765  return Worker::kFilter;
766  }
767  template <>
769  return Worker::kAnalyzer;
770  }
771  template <>
773  return Worker::kOutputModule;
774  }
775 
776  template <>
778  return Worker::kProducer;
779  }
780  template <>
782  return Worker::kFilter;
783  }
784  template <>
786  return Worker::kAnalyzer;
787  }
788  template <>
790  return Worker::kOutputModule;
791  }
792 
793  template <>
795  return Worker::kProducer;
796  }
797  template <>
799  return Worker::kFilter;
800  }
801  template <>
803  return Worker::kAnalyzer;
804  }
805 
806  template <>
808  return Worker::kLegacy;
809  }
810  template <>
812  return Worker::kLegacy;
813  }
814  template <>
816  return Worker::kLegacy;
817  }
818  template <>
820  return Worker::kOne;
821  }
822  template <>
824  return Worker::kOne;
825  }
826  template <>
828  return Worker::kOne;
829  }
830  template <>
832  return Worker::kOne;
833  }
834 
835  template <>
837  return Worker::kGlobal;
838  }
839  template <>
841  return Worker::kGlobal;
842  }
843  template <>
845  return Worker::kGlobal;
846  }
847  template <>
849  return Worker::kGlobal;
850  }
851 
852  template <>
854  return Worker::kLimited;
855  }
856  template <>
858  return Worker::kLimited;
859  }
860  template <>
862  return Worker::kLimited;
863  }
864  template <>
866  return Worker::kLimited;
867  }
868 
869  template <>
871  return Worker::kStream;
872  }
873  template <>
875  return Worker::kStream;
876  }
877  template <>
879  return Worker::kStream;
880  }
881 
882  //Explicitly instantiate our needed templates to avoid having the compiler
883  // instantiate them in all of our libraries
884  template class WorkerT<EDProducer>;
885  template class WorkerT<EDFilter>;
886  template class WorkerT<EDAnalyzer>;
887  template class WorkerT<one::EDProducerBase>;
888  template class WorkerT<one::EDFilterBase>;
889  template class WorkerT<one::EDAnalyzerBase>;
890  template class WorkerT<one::OutputModuleBase>;
891  template class WorkerT<global::EDProducerBase>;
892  template class WorkerT<global::EDFilterBase>;
893  template class WorkerT<global::EDAnalyzerBase>;
894  template class WorkerT<global::OutputModuleBase>;
898  template class WorkerT<limited::EDProducerBase>;
899  template class WorkerT<limited::EDFilterBase>;
900  template class WorkerT<limited::EDAnalyzerBase>;
901  template class WorkerT<limited::OutputModuleBase>;
902 } // namespace edm
void updateLookup(BranchType iBranchType, ProductResolverIndexHelper const &) final
Definition: WorkerT.cc:654
static const char module_[]
void operator()(WorkerT< T > *iWorker, StreamID id, INFOTYPE const &info, ModuleCallingContext const *mcc)
Definition: WorkerT.cc:113
static const TGPicture * info(bool iBackgroundIsBlack)
bool implDoEndProcessBlock(ProcessBlockPrincipal const &, ModuleCallingContext const *) override
Definition: WorkerT.cc:347
SerialTaskQueue * globalRunsQueue() final
Definition: WorkerT.cc:159
Definition: helper.py:1
roAction_t actions[nactions]
Definition: GenABIO.cc:181
SerialTaskQueue * globalLuminosityBlocksQueue() final
Definition: WorkerT.cc:163
void operator()(WorkerT< T > *iWorker, StreamID id, INFOTYPE const &info, ModuleCallingContext const *mcc)
Definition: WorkerT.cc:106
void implEndJob() override
Definition: WorkerT.cc:464
std::string workerType() const override
Definition: WorkerT.cc:454
void callWorkerStreamEnd(D, StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
Definition: WorkerT.cc:369
bool wantsStreamLuminosityBlocks() const final
Definition: WorkerT.cc:154
bool implNeedToRunSelection() const final
Definition: WorkerT.cc:272
bool implDoStreamEnd(StreamID, RunTransitionInfo const &, ModuleCallingContext const *) override
Definition: WorkerT.cc:386
bool implDoPrePrefetchSelection(StreamID, EventPrincipal const &, ModuleCallingContext const *) override
Definition: WorkerT.cc:277
assert(be >=bs)
bool implDoAccessInputProcessBlock(ProcessBlockPrincipal const &, ModuleCallingContext const *) override
Definition: WorkerT.cc:341
BranchType
Definition: BranchType.h:11
void callWorkerStreamBegin(D, StreamID, RunTransitionInfo const &, ModuleCallingContext const *)
Definition: WorkerT.cc:360
edm::propagate_const< std::shared_ptr< T > > module_
Definition: WorkerT.h:164
void itemsToGetForSelection(std::vector< ProductResolverIndexAndSkipBit > &) const final
Definition: WorkerT.cc:283
void implRespondToOpenInputFile(FileBlock const &fb) override
Definition: WorkerT.cc:501
void implRespondToCloseOutputFile() override
Definition: WorkerT.cc:511
Types moduleType() const override
void callWorkerEndStream(D, StreamID)
Definition: WorkerT.cc:486
std::vector< ProductResolverIndex > const & itemsShouldPutInEvent() const override
Definition: WorkerT.cc:726
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
void operator()(WorkerT< T > *iWorker, StreamID id)
Definition: WorkerT.cc:96
void operator()(const T &...)
Definition: WorkerT.cc:91
void implBeginStream(StreamID) override
Definition: WorkerT.cc:475
void resolvePutIndicies(BranchType iBranchType, std::unordered_multimap< std::string, std::tuple< TypeID const *, const char *, edm::ProductResolverIndex >> const &iIndicies) final
Definition: WorkerT.cc:718
bool implDoStreamBegin(StreamID, RunTransitionInfo const &, ModuleCallingContext const *) override
Definition: WorkerT.cc:374
bool wantsInputProcessBlocks() const final
Definition: WorkerT.cc:134
Definition: value.py:1
TaskQueueAdaptor serializeRunModule() override
Definition: WorkerT.cc:522
void operator()(WorkerT< T > *iWorker, StreamID id)
Definition: WorkerT.cc:101
bool wantsGlobalLuminosityBlocks() const final
Definition: WorkerT.cc:144
ConcurrencyTypes
Definition: Worker.h:96
~WorkerT() override
Definition: WorkerT.cc:126
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts(BranchType iBranchType) const
bool implDoBeginProcessBlock(ProcessBlockPrincipal const &, ModuleCallingContext const *) override
Definition: WorkerT.cc:335
DecomposeProduct< arg, typename Div::arg > D
Definition: Factorize.h:141
void implEndStream(StreamID) override
Definition: WorkerT.cc:491
void implBeginJob() override
Definition: WorkerT.cc:459
bool wantsProcessBlocks() const final
Definition: WorkerT.cc:129
void implRespondToCloseInputFile(FileBlock const &fb) override
Definition: WorkerT.cc:506
bool implDoEnd(RunTransitionInfo const &, ModuleCallingContext const *) override
Definition: WorkerT.cc:396
void resolvePutIndicies(BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
void callWorkerBeginStream(D, StreamID)
Definition: WorkerT.cc:470
void implDoAcquire(EventTransitionInfo const &, ModuleCallingContext const *, WaitingTaskWithArenaHolder &) final
Definition: WorkerT.cc:232
HLT enums.
bool wantsGlobalRuns() const final
Definition: WorkerT.cc:139
bool wantsStreamRuns() const final
Definition: WorkerT.cc:149
void implRegisterThinnedAssociations(ProductRegistry const &, ThinnedAssociationsHelper &) override
Definition: WorkerT.cc:516
bool implDoBegin(RunTransitionInfo const &, ModuleCallingContext const *) override
Definition: WorkerT.cc:353
long double T
WorkerT(std::shared_ptr< T >, ModuleDescription const &, ExceptionToActionTable const *actions)
Definition: WorkerT.cc:120
void selectInputProcessBlocks(ProductRegistry const &, ProcessBlockHelperBase const &) final
Definition: WorkerT.cc:664
ConcurrencyTypes moduleConcurrencyType() const override
bool implDo(EventTransitionInfo const &, ModuleCallingContext const *) override
Definition: WorkerT.cc:225