File indexing completed on 2025-01-31 02:19:20
0001 #ifndef FWCore_Framework_stream_EDProducerBase_h
0002 #define FWCore_Framework_stream_EDProducerBase_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include "FWCore/Framework/interface/ProducerBase.h"
0025 #include "FWCore/Framework/interface/EDConsumerBase.h"
0026 #include "FWCore/Framework/interface/Frameworkfwd.h"
0027 #include "FWCore/Framework/interface/stream/EDProducerAdaptor.h"
0028 #include "DataFormats/Provenance/interface/ModuleDescription.h"
0029 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
0030 #include "FWCore/Utilities/interface/ProductResolverIndex.h"
0031
0032
0033 namespace edm {
0034 template <typename T>
0035 class WorkerT;
0036 class ProductRegistry;
0037 class ThinnedAssociationsHelper;
0038 class EventForTransformer;
0039
0040 namespace stream {
0041 class EDProducerAdaptorBase;
0042 template <typename>
0043 class ProducingModuleAdaptorBase;
0044
0045 class EDProducerBase : public edm::ProducerBase, public edm::EDConsumerBase {
0046
0047 friend class EDProducerAdaptorBase;
0048 friend class ProducingModuleAdaptorBase<EDProducerBase>;
0049
0050 public:
0051 typedef EDProducerAdaptorBase ModuleType;
0052
0053 EDProducerBase();
0054 EDProducerBase(const EDProducerBase&) = delete;
0055 const EDProducerBase& operator=(const EDProducerBase&) = delete;
0056 ~EDProducerBase() override;
0057
0058 static void fillDescriptions(ConfigurationDescriptions& descriptions);
0059 static void prevalidate(ConfigurationDescriptions& descriptions);
0060 static const std::string& baseType();
0061
0062
0063 ModuleDescription const& moduleDescription() const { return *moduleDescriptionPtr_; }
0064
0065 private:
0066 virtual void beginStream(StreamID) {}
0067 virtual void beginRun(edm::Run const&, edm::EventSetup const&) {}
0068 virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {}
0069 virtual void produce(Event&, EventSetup const&) = 0;
0070 virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {}
0071 virtual void endRun(edm::Run const&, edm::EventSetup const&) {}
0072 virtual void endStream() {}
0073
0074 virtual void registerThinnedAssociations(ProductRegistry const&, ThinnedAssociationsHelper&) {}
0075
0076 virtual void doAcquire_(Event const&, EventSetup const&, WaitingTaskHolder&&) = 0;
0077 virtual size_t transformIndex_(edm::ProductDescription const& iBranch) const noexcept;
0078 virtual ProductResolverIndex transformPrefetch_(std::size_t iIndex) const noexcept;
0079 virtual void transformAsync_(WaitingTaskHolder iTask,
0080 std::size_t iIndex,
0081 edm::EventForTransformer& iEvent,
0082 edm::ActivityRegistry* iAct,
0083 ServiceWeakToken const& iToken) const noexcept;
0084
0085 void setModuleDescriptionPtr(ModuleDescription const* iDesc) { moduleDescriptionPtr_ = iDesc; }
0086
0087 std::vector<BranchID> previousParentage_;
0088 std::vector<BranchID> gotBranchIDsFromAcquire_;
0089 ParentageID previousParentageId_;
0090 ModuleDescription const* moduleDescriptionPtr_;
0091 };
0092
0093 }
0094 }
0095
0096 #endif