Back to home page

Project CMSSW displayed by LXR

 
 

    


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 // -*- C++ -*-
0004 //
0005 // Package:     FWCore/Framework
0006 // Class  :     EDProducerBase
0007 //
0008 /**\class edm::stream::EDProducerBase EDProducerBase.h "FWCore/Framework/interface/stream/EDProducerBase.h"
0009 
0010  Description: [one line class summary]
0011 
0012  Usage:
0013     <usage>
0014 
0015 */
0016 //
0017 // Original Author:  Chris Jones
0018 //         Created:  Fri, 02 Aug 2013 00:11:27 GMT
0019 //
0020 
0021 // system include files
0022 
0023 // user include files
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 // forward declarations
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       //This needs access to the parentage cache info
0047       friend class EDProducerAdaptorBase;
0048       friend class ProducingModuleAdaptorBase<EDProducerBase>;
0049 
0050     public:
0051       typedef EDProducerAdaptorBase ModuleType;
0052 
0053       EDProducerBase();
0054       EDProducerBase(const EDProducerBase&) = delete;                   // stop default
0055       const EDProducerBase& operator=(const EDProducerBase&) = delete;  // stop default
0056       ~EDProducerBase() override;
0057 
0058       static void fillDescriptions(ConfigurationDescriptions& descriptions);
0059       static void prevalidate(ConfigurationDescriptions& descriptions);
0060       static const std::string& baseType();
0061 
0062       // Warning: the returned moduleDescription will be invalid during construction
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       // ---------- member data --------------------------------
0087       std::vector<BranchID> previousParentage_;
0088       std::vector<BranchID> gotBranchIDsFromAcquire_;
0089       ParentageID previousParentageId_;
0090       ModuleDescription const* moduleDescriptionPtr_;
0091     };
0092 
0093   }  // namespace stream
0094 }  // namespace edm
0095 
0096 #endif