Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:12:01

0001 #ifndef FWCore_Framework_DelayedReader_h
0002 #define FWCore_Framework_DelayedReader_h
0003 
0004 /*----------------------------------------------------------------------
0005 
0006 DelayedReader: The abstract interface through which the Principal
0007 uses input sources to retrieve EDProducts from external storage.
0008 
0009 ----------------------------------------------------------------------*/
0010 
0011 #include "DataFormats/Common/interface/WrapperBase.h"
0012 
0013 #include <memory>
0014 #include <mutex>
0015 
0016 namespace edm {
0017 
0018   class BranchID;
0019   class EDProductGetter;
0020   class ModuleCallingContext;
0021   class SharedResourcesAcquirer;
0022   class StreamContext;
0023 
0024   namespace signalslot {
0025     template <typename T>
0026     class Signal;
0027   }
0028 
0029   class DelayedReader {
0030   public:
0031     virtual ~DelayedReader();
0032     std::shared_ptr<WrapperBase> getProduct(BranchID const& k,
0033                                             EDProductGetter const* ep,
0034                                             ModuleCallingContext const* mcc = nullptr);
0035 
0036     void mergeReaders(DelayedReader* other) { mergeReaders_(other); }
0037     void reset() { reset_(); }
0038 
0039     std::pair<SharedResourcesAcquirer*, std::recursive_mutex*> sharedResources() const { return sharedResources_(); }
0040 
0041     virtual signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const*
0042     preEventReadFromSourceSignal() const = 0;
0043     virtual signalslot::Signal<void(StreamContext const&, ModuleCallingContext const&)> const*
0044     postEventReadFromSourceSignal() const = 0;
0045 
0046   private:
0047     virtual std::shared_ptr<WrapperBase> getProduct_(BranchID const& k, EDProductGetter const* ep) = 0;
0048     virtual void mergeReaders_(DelayedReader*) = 0;
0049     virtual void reset_() = 0;
0050     virtual std::pair<SharedResourcesAcquirer*, std::recursive_mutex*> sharedResources_() const;
0051   };
0052 }  // namespace edm
0053 
0054 #endif