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 INFOTYPE>
101 template <
typename T,
typename INFOTYPE>
109 template <
typename T>
115 template <
typename T>
118 template <
typename T>
120 return module_->wantsProcessBlocks();
123 template <
typename T>
125 return module_->wantsInputProcessBlocks();
128 template <
typename T>
130 return module_->wantsGlobalRuns();
133 template <
typename T>
135 return module_->wantsGlobalLuminosityBlocks();
138 template <
typename T>
140 return module_->wantsStreamRuns();
143 template <
typename T>
145 return module_->wantsStreamLuminosityBlocks();
148 template <
typename T>
152 template <
typename T>
158 return module_->globalRunsQueue();
162 return module_->globalLuminosityBlocksQueue();
166 return module_->globalRunsQueue();
170 return module_->globalLuminosityBlocksQueue();
174 return module_->globalRunsQueue();
178 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();
207 return module_->globalRunsQueue();
211 return module_->globalLuminosityBlocksQueue();
214 template <
typename T>
217 std::shared_ptr<Worker> sentry(
this, [&
ep](
Worker*
obj) {
obj->postDoEvent(
ep); });
218 return module_->doEvent(
info, activityRegistry(), mcc);
221 template <
typename T>
230 module_->doAcquire(
info, activityRegistry(), mcc, holder);
237 module_->doAcquire(
info, activityRegistry(), mcc, holder);
244 module_->doAcquire(
info, activityRegistry(), mcc, holder);
251 module_->doAcquire(
info, activityRegistry(), mcc, holder);
254 template <
typename T>
259 template <
typename T>
265 template <
typename T>
277 return module_->prePrefetchSelection(
id,
ep, mcc);
281 std::vector<ProductResolverIndexAndSkipBit>& iItems)
const {
282 iItems =
module_->productsUsedBySelection();
293 return module_->prePrefetchSelection(
id,
ep, mcc);
297 std::vector<ProductResolverIndexAndSkipBit>& iItems)
const {
298 iItems =
module_->productsUsedBySelection();
309 return module_->prePrefetchSelection(
id,
ep, mcc);
313 std::vector<ProductResolverIndexAndSkipBit>& iItems)
const {
314 iItems =
module_->productsUsedBySelection();
317 template <
typename T>
319 module_->doBeginProcessBlock(pbp, mcc);
323 template <
typename T>
325 module_->doAccessInputProcessBlock(pbp, mcc);
329 template <
typename T>
331 module_->doEndProcessBlock(pbp, mcc);
335 template <
typename T>
341 template <
typename T>
342 template <
typename D>
350 template <
typename T>
351 template <
typename D>
356 template <
typename T>
364 might_call(
this,
id,
info, mcc);
368 template <
typename T>
374 might_call(
this,
id,
info, mcc);
378 template <
typename T>
384 template <
typename T>
390 template <
typename T>
391 template <
typename D>
396 module_->doStreamBeginLuminosityBlock(
id,
info, mcc);
399 template <
typename T>
400 template <
typename D>
402 module_->doStreamEndLuminosityBlock(
id,
info, mcc);
405 template <
typename T>
413 might_call(
this,
id,
info, mcc);
417 template <
typename T>
425 might_call(
this,
id,
info, mcc);
430 template <
typename T>
436 template <
typename T>
441 template <
typename T>
446 template <
typename T>
451 template <
typename T>
452 template <
typename D>
457 template <
typename T>
461 might_call(
this,
id);
464 template <
typename T>
465 template <
typename D>
470 template <
typename T>
474 might_call(
this,
id);
477 template <
typename T>
482 template <
typename T>
487 template <
typename T>
493 template <
typename T>
499 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
503 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
507 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
511 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
515 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
519 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
523 return &(
module_->sharedResourcesAcquirer().serialQueueChain());
543 template <
typename T>
544 bool mustPrefetchMayGet();
547 bool mustPrefetchMayGet<EDAnalyzer>() {
551 bool mustPrefetchMayGet<EDProducer>() {
555 bool mustPrefetchMayGet<EDFilter>() {
560 bool mustPrefetchMayGet<edm::one::EDProducerBase>() {
564 bool mustPrefetchMayGet<edm::one::EDFilterBase>() {
568 bool mustPrefetchMayGet<edm::one::EDAnalyzerBase>() {
572 bool mustPrefetchMayGet<edm::one::OutputModuleBase>() {
577 bool mustPrefetchMayGet<edm::global::EDProducerBase>() {
581 bool mustPrefetchMayGet<edm::global::EDFilterBase>() {
585 bool mustPrefetchMayGet<edm::global::EDAnalyzerBase>() {
589 bool mustPrefetchMayGet<edm::global::OutputModuleBase>() {
594 bool mustPrefetchMayGet<edm::limited::EDProducerBase>() {
598 bool mustPrefetchMayGet<edm::limited::EDFilterBase>() {
602 bool mustPrefetchMayGet<edm::limited::EDAnalyzerBase>() {
606 bool mustPrefetchMayGet<edm::limited::OutputModuleBase>() {
611 bool mustPrefetchMayGet<edm::stream::EDProducerAdaptorBase>() {
615 bool mustPrefetchMayGet<edm::stream::EDFilterAdaptorBase>() {
619 bool mustPrefetchMayGet<edm::stream::EDAnalyzerAdaptorBase>() {
625 template <
typename T>
627 module_->updateLookup(iBranchType, iHelper, mustPrefetchMayGet<T>());
630 template <
typename T>
636 using ModuleToResolverIndicies =
637 std::unordered_multimap<std::string, std::tuple<edm::TypeID const*, const char*, edm::ProductResolverIndex>>;
638 void resolvePutIndiciesImpl(
void*,
640 ModuleToResolverIndicies
const& iIndicies,
645 void resolvePutIndiciesImpl(ProducerBase* iProd,
647 ModuleToResolverIndicies
const& iIndicies,
649 iProd->resolvePutIndicies(iBranchType, iIndicies, iModuleLabel);
654 ModuleToResolverIndicies
const& iIndicies,
660 ModuleToResolverIndicies
const& iIndicies,
665 std::vector<ProductResolverIndex> s_emptyIndexList;
667 std::vector<ProductResolverIndex>
const& itemsShouldPutInEventImpl(
void const*) {
return s_emptyIndexList; }
669 std::vector<ProductResolverIndex>
const& itemsShouldPutInEventImpl(ProducerBase
const* iProd) {
683 template <
typename T>
686 std::unordered_multimap<
std::string, std::tuple<TypeID const*, const char*, edm::ProductResolverIndex>>
const&
691 template <
typename T>
693 return itemsShouldPutInEventImpl(&module());