25 #include <type_traits>
28 namespace workerimpl {
31 static bool constexpr
value =
false;
36 static bool constexpr
value =
true;
41 static bool constexpr
value =
true;
46 static bool constexpr
value =
true;
51 static bool constexpr
value =
true;
56 static bool constexpr
value =
true;
61 static bool constexpr
value =
true;
66 static bool constexpr
value =
true;
71 static bool constexpr
value =
true;
76 static bool constexpr
value =
true;
80 template <
typename...
T>
94 template <
typename T,
typename P>
102 template <
typename T,
typename P>
111 template <
typename T>
117 template <
typename T>
120 template <
typename T>
122 return module_->wantsGlobalRuns();
125 template <
typename T>
127 return module_->wantsGlobalLuminosityBlocks();
130 template <
typename T>
132 return module_->wantsStreamRuns();
135 template <
typename T>
137 return module_->wantsStreamLuminosityBlocks();
140 template <
typename T>
144 template <
typename T>
150 return module_->globalRunsQueue();
154 return module_->globalLuminosityBlocksQueue();
158 return module_->globalRunsQueue();
162 return module_->globalLuminosityBlocksQueue();
166 return module_->globalRunsQueue();
170 return module_->globalLuminosityBlocksQueue();
175 return module_->globalRunsQueue();
179 return module_->globalLuminosityBlocksQueue();
183 return module_->globalRunsQueue();
187 return module_->globalLuminosityBlocksQueue();
191 return module_->globalRunsQueue();
195 return module_->globalLuminosityBlocksQueue();
199 return module_->globalRunsQueue();
203 return module_->globalLuminosityBlocksQueue();
206 template <
typename T>
208 std::shared_ptr<Worker> sentry(
this, [&
ep](
Worker*
obj) {
obj->postDoEvent(
ep); });
209 return module_->doEvent(
ep,
c, activityRegistry(), mcc);
212 template <
typename T>
223 module_->doAcquire(
ep,
c, activityRegistry(), mcc, holder);
231 module_->doAcquire(
ep,
c, activityRegistry(), mcc, holder);
239 module_->doAcquire(
ep,
c, activityRegistry(), mcc, holder);
247 module_->doAcquire(
ep,
c, activityRegistry(), mcc, holder);
250 template <
typename T>
255 template <
typename T>
261 template <
typename T>
273 return module_->prePrefetchSelection(
id,
ep, mcc);
277 std::vector<ProductResolverIndexAndSkipBit>& iItems)
const {
278 iItems =
module_->productsUsedBySelection();
289 return module_->prePrefetchSelection(
id,
ep, mcc);
293 std::vector<ProductResolverIndexAndSkipBit>& iItems)
const {
294 iItems =
module_->productsUsedBySelection();
305 return module_->prePrefetchSelection(
id,
ep, mcc);
309 std::vector<ProductResolverIndexAndSkipBit>& iItems)
const {
310 iItems =
module_->productsUsedBySelection();
313 template <
typename T>
321 template <
typename T>
322 template <
typename D>
325 module_->doStreamBeginRun(
id, rp,
c, mcc);
328 template <
typename T>
329 template <
typename D>
332 module_->doStreamEndRun(
id, rp,
c, mcc);
335 template <
typename T>
344 might_call(
this,
id, rp,
c, mcc);
348 template <
typename T>
357 might_call(
this,
id, rp,
c, mcc);
361 template <
typename T>
367 template <
typename T>
371 module_->doBeginLuminosityBlock(lbp,
c, mcc);
375 template <
typename T>
376 template <
typename D>
379 module_->doStreamBeginLuminosityBlock(
id, rp,
c, mcc);
382 template <
typename T>
383 template <
typename D>
386 module_->doStreamEndLuminosityBlock(
id, rp,
c, mcc);
389 template <
typename T>
398 might_call(
this,
id, lbp,
c, mcc);
402 template <
typename T>
411 might_call(
this,
id, lbp,
c, mcc);
416 template <
typename T>
420 module_->doEndLuminosityBlock(lbp,
c, mcc);
424 template <
typename T>
429 template <
typename T>
434 template <
typename T>
439 template <
typename T>
440 template <
typename D>
445 template <
typename T>
449 might_call(
this,
id);
452 template <
typename T>
453 template <
typename D>
458 template <
typename T>
462 might_call(
this,
id);
465 template <
typename T>
470 template <
typename T>
475 template <
typename T>
481 template <
typename T>
487 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
491 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
495 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
499 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
503 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
507 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
511 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
531 template <
typename T>
532 bool mustPrefetchMayGet();
535 bool mustPrefetchMayGet<EDAnalyzer>() {
539 bool mustPrefetchMayGet<EDProducer>() {
543 bool mustPrefetchMayGet<EDFilter>() {
548 bool mustPrefetchMayGet<edm::one::EDProducerBase>() {
552 bool mustPrefetchMayGet<edm::one::EDFilterBase>() {
556 bool mustPrefetchMayGet<edm::one::EDAnalyzerBase>() {
560 bool mustPrefetchMayGet<edm::one::OutputModuleBase>() {
565 bool mustPrefetchMayGet<edm::global::EDProducerBase>() {
569 bool mustPrefetchMayGet<edm::global::EDFilterBase>() {
573 bool mustPrefetchMayGet<edm::global::EDAnalyzerBase>() {
577 bool mustPrefetchMayGet<edm::global::OutputModuleBase>() {
582 bool mustPrefetchMayGet<edm::limited::EDProducerBase>() {
586 bool mustPrefetchMayGet<edm::limited::EDFilterBase>() {
590 bool mustPrefetchMayGet<edm::limited::EDAnalyzerBase>() {
594 bool mustPrefetchMayGet<edm::limited::OutputModuleBase>() {
599 bool mustPrefetchMayGet<edm::stream::EDProducerAdaptorBase>() {
603 bool mustPrefetchMayGet<edm::stream::EDFilterAdaptorBase>() {
607 bool mustPrefetchMayGet<edm::stream::EDAnalyzerAdaptorBase>() {
613 template <
typename T>
615 module_->updateLookup(iBranchType, iHelper, mustPrefetchMayGet<T>());
618 template <
typename T>
624 using ModuleToResolverIndicies =
625 std::unordered_multimap<std::string, std::tuple<edm::TypeID const*, const char*, edm::ProductResolverIndex>>;
626 void resolvePutIndiciesImpl(
void*,
628 ModuleToResolverIndicies
const& iIndicies,
633 void resolvePutIndiciesImpl(ProducerBase* iProd,
635 ModuleToResolverIndicies
const& iIndicies,
637 iProd->resolvePutIndicies(iBranchType, iIndicies, iModuleLabel);
642 ModuleToResolverIndicies
const& iIndicies,
648 ModuleToResolverIndicies
const& iIndicies,
653 std::vector<ProductResolverIndex> s_emptyIndexList;
655 std::vector<ProductResolverIndex>
const& itemsShouldPutInEventImpl(
void const*) {
return s_emptyIndexList; }
657 std::vector<ProductResolverIndex>
const& itemsShouldPutInEventImpl(ProducerBase
const* iProd) {
671 template <
typename T>
674 std::unordered_multimap<
std::string, std::tuple<TypeID const*, const char*, edm::ProductResolverIndex>>
const&
679 template <
typename T>
681 return itemsShouldPutInEventImpl(&
module());