File indexing completed on 2023-03-17 11:01:59
0001 #ifndef FWCore_Framework_DelayedReader_h
0002 #define FWCore_Framework_DelayedReader_h
0003
0004
0005
0006
0007
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 }
0053
0054 #endif