File indexing completed on 2024-04-06 12:12:13
0001 #include "FWCore/Framework/interface/ProcessBlock.h"
0002 #include "FWCore/Framework/interface/ProcessBlockPrincipal.h"
0003 #include "FWCore/Framework/interface/ProductPutterBase.h"
0004
0005 namespace edm {
0006
0007 ProcessBlock::ProcessBlock(ProcessBlockPrincipal const& pbp,
0008 ModuleDescription const& md,
0009 ModuleCallingContext const* moduleCallingContext,
0010 bool isAtEnd)
0011 : provRecorder_(pbp, md, isAtEnd), moduleCallingContext_(moduleCallingContext) {}
0012
0013 void ProcessBlock::setProducer(ProducerBase const* iProducer) {
0014 provRecorder_.setProducer(iProducer);
0015
0016 putProducts_.resize(provRecorder_.putTokenIndexToProductResolverIndex().size());
0017 }
0018
0019 ProcessBlock::CacheIdentifier_t ProcessBlock::cacheIdentifier() const {
0020 return processBlockPrincipal().cacheIdentifier();
0021 }
0022
0023 std::string const& ProcessBlock::processName() const { return processBlockPrincipal().processName(); }
0024
0025 ProcessBlockPrincipal const& ProcessBlock::processBlockPrincipal() const {
0026 return dynamic_cast<ProcessBlockPrincipal const&>(provRecorder_.principal());
0027 }
0028
0029 void ProcessBlock::commit_(std::vector<edm::ProductResolverIndex> const& iShouldPut) {
0030 ProcessBlockPrincipal const& pbp = processBlockPrincipal();
0031 size_t nPut = 0;
0032 for (size_t i = 0; i < putProducts().size(); ++i) {
0033 auto& product = get_underlying_safe(putProducts()[i]);
0034 if (product) {
0035 pbp.put(provRecorder_.putTokenIndexToProductResolverIndex()[i], std::move(product));
0036 ++nPut;
0037 }
0038 }
0039
0040 auto sz = iShouldPut.size();
0041 if (sz != 0 and sz != nPut) {
0042
0043 auto& principal = provRecorder_.principal();
0044 for (auto index : iShouldPut) {
0045 auto resolver = principal.getProductResolverByIndex(index);
0046 if (not resolver->productResolved() and isEndTransition(provRecorder_.transition()) ==
0047 resolver->branchDescription().availableOnlyAtEndTransition()) {
0048 dynamic_cast<ProductPutterBase const*>(resolver)->putProduct(std::unique_ptr<WrapperBase>());
0049 }
0050 }
0051 }
0052
0053
0054 putProducts().clear();
0055 }
0056
0057 }