CMS 3D CMS Logo

ProductProvenanceLookup.h
Go to the documentation of this file.
1 #ifndef DataFormats_Provenance_ProductProvenanceLookup_h
2 #define DataFormats_Provenance_ProductProvenanceLookup_h
3 
4 /*----------------------------------------------------------------------
5 
6 ProductProvenanceLookup: Gives access to the per event/lumi/run per product provenance.
7 
8 ----------------------------------------------------------------------*/
14 
15 #include <vector>
16 #include <memory>
17 #include <set>
18 #include <atomic>
19 
20 /*
21  ProductProvenanceLookup
22 */
23 
24 namespace edm {
25  class ProductRegistry;
26 
28  public:
31  virtual ~ProductProvenanceLookup();
32 
34 
35  ProductProvenance const* branchIDToProvenance(BranchID const& bid) const;
36  void insertIntoSet(ProductProvenance provenanceProduct) const;
38 
39  void update(edm::ProductRegistry const&);
40 
42  public:
45  : provenance_{std::move(iOther.provenance_)},
46  isParentageSet_{iOther.isParentageSet_.load(std::memory_order_acquire)} {}
48  bool isSet = iOther.isParentageSet_.load(std::memory_order_acquire);
49  if (isSet) {
50  provenance_.set(iOther.provenance_.parentageID());
51  }
52  isParentageSet_.store(isSet, std::memory_order_release);
53  }
54 
56  provenance_ = std::move(iOther.provenance_);
57  isParentageSet_.store(iOther.isParentageSet_.load(std::memory_order_acquire), std::memory_order_release);
58  return *this;
59  }
61  bool isSet = iOther.isParentageSet_.load(std::memory_order_acquire);
62  if (isSet) {
63  provenance_ = iOther.provenance_;
64  } else {
66  }
67  isParentageSet_.store(isSet, std::memory_order_release);
68  return *this;
69  }
70 
72  if (LIKELY(isParentageSet())) {
73  return &provenance_;
74  }
75  return nullptr;
76  }
77  BranchID branchID() const noexcept { return provenance_.branchID(); }
78 
79  bool isParentageSet() const noexcept { return isParentageSet_.load(std::memory_order_acquire); }
80 
81  void threadsafe_set(ParentageID id) const {
83  isParentageSet_.store(true, std::memory_order_release);
84  }
85 
86  void resetParentage() { isParentageSet_.store(false, std::memory_order_release); }
87 
88  private:
90  mutable std::atomic<bool> isParentageSet_;
91  };
92 
93  protected:
94  virtual std::unique_ptr<const std::set<ProductProvenance>> readProvenance() const = 0;
95  virtual const ProductProvenanceLookup* nextRetriever() const = 0;
96 
97  std::vector<ProducedProvenanceInfo> entryInfoSet_;
98  mutable std::atomic<const std::set<ProductProvenance>*> readEntryInfoSet_;
100 
101  private:
103  };
104 } // namespace edm
105 #endif
Likely.h
edm::ProductProvenanceLookup::ProducedProvenanceInfo::ProducedProvenanceInfo
ProducedProvenanceInfo(BranchID iBid)
Definition: ProductProvenanceLookup.h:43
edm::ProductProvenanceLookup::ProducedProvenanceInfo::ProducedProvenanceInfo
ProducedProvenanceInfo(ProducedProvenanceInfo &&iOther)
Definition: ProductProvenanceLookup.h:44
propagate_const.h
edm::ProductProvenanceLookup::readProvenance
virtual std::unique_ptr< const std::set< ProductProvenance > > readProvenance() const =0
edm::ProductProvenanceLookup::ProducedProvenanceInfo::branchID
BranchID branchID() const noexcept
Definition: ProductProvenanceLookup.h:77
edm
HLT enums.
Definition: AlignableModifier.h:19
BranchID.h
edm::ProductProvenanceLookup::parentProcessRetriever_
edm::propagate_const< ProductProvenanceLookup const * > parentProcessRetriever_
Definition: ProductProvenanceLookup.h:99
edm::ProductProvenanceLookup::ProducedProvenanceInfo
Definition: ProductProvenanceLookup.h:41
watchdog.const
const
Definition: watchdog.py:83
edm::ProductProvenanceLookup::entryInfoSet_
std::vector< ProducedProvenanceInfo > entryInfoSet_
Definition: ProductProvenanceLookup.h:97
edm::ProductProvenanceLookup::insertIntoSet
void insertIntoSet(ProductProvenance provenanceProduct) const
Definition: ProductProvenanceLookup.cc:42
edm::ProductRegistry
Definition: ProductRegistry.h:37
edm::ProductProvenanceLookup::readEntryInfoSet_
std::atomic< const std::set< ProductProvenance > * > readEntryInfoSet_
Definition: ProductProvenanceLookup.h:98
edm::propagate_const
Definition: propagate_const.h:32
edm::ProductProvenanceLookup::ProducedProvenanceInfo::threadsafe_set
void threadsafe_set(ParentageID id) const
Definition: ProductProvenanceLookup.h:81
edm::ProductProvenance
Definition: ProductProvenance.h:24
edm::ProductProvenanceLookup::~ProductProvenanceLookup
virtual ~ProductProvenanceLookup()
Definition: ProductProvenanceLookup.cc:20
ProductProvenance.h
edm::BranchID
Definition: BranchID.h:14
edm::ProductProvenance::set
void set(ParentageID id)
Definition: ProductProvenance.h:42
edm::ProductProvenanceLookup::nextRetriever
virtual const ProductProvenanceLookup * nextRetriever() const =0
edm::ProductProvenance::branchID
BranchID const & branchID() const
Definition: ProductProvenance.h:38
edm::Hash< ParentageType >
edm::ProductProvenanceLookup::setupEntryInfoSet
void setupEntryInfoSet(edm::ProductRegistry const &)
Definition: ProductProvenanceLookup.cc:22
edm::ProductProvenanceLookup::branchIDToProvenance
ProductProvenance const * branchIDToProvenance(BranchID const &bid) const
Definition: ProductProvenanceLookup.cc:59
edm::ProductProvenanceLookup::ProducedProvenanceInfo::isParentageSet_
std::atomic< bool > isParentageSet_
Definition: ProductProvenanceLookup.h:90
edm::ProductProvenanceLookup::ProducedProvenanceInfo::isParentageSet
bool isParentageSet() const noexcept
Definition: ProductProvenanceLookup.h:79
edm::ProductProvenanceLookup::ProducedProvenanceInfo::ProducedProvenanceInfo
ProducedProvenanceInfo(ProducedProvenanceInfo const &iOther)
Definition: ProductProvenanceLookup.h:47
edm::ProductProvenanceLookup::branchIDToProvenanceForProducedOnly
ProductProvenance const * branchIDToProvenanceForProducedOnly(BranchID const &bid) const
Definition: ProductProvenanceLookup.cc:95
thread_safety_macros.h
edm::ProductProvenanceLookup::ProducedProvenanceInfo::operator=
ProducedProvenanceInfo & operator=(ProducedProvenanceInfo const &iOther)
Definition: ProductProvenanceLookup.h:60
edm::ProductProvenanceLookup::ProductProvenanceLookup
ProductProvenanceLookup()
Definition: ProductProvenanceLookup.cc:12
edm::ProductProvenanceLookup::operator=
ProductProvenanceLookup & operator=(ProductProvenanceLookup const &)=delete
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::ProductProvenanceLookup::ProducedProvenanceInfo::resetParentage
void resetParentage()
Definition: ProductProvenanceLookup.h:86
LIKELY
#define LIKELY(x)
Definition: Likely.h:20
edm::ProductProvenanceLookup::ProducedProvenanceInfo::operator=
ProducedProvenanceInfo & operator=(ProducedProvenanceInfo &&iOther)
Definition: ProductProvenanceLookup.h:55
CMS_THREAD_GUARD
#define CMS_THREAD_GUARD(_var_)
Definition: thread_safety_macros.h:6
edm::ProductProvenanceLookup::ProducedProvenanceInfo::provenance_
ProductProvenance provenance_
Definition: ProductProvenanceLookup.h:89
edm::ProductProvenanceLookup
Definition: ProductProvenanceLookup.h:27
edm::ProductProvenanceLookup::update
void update(edm::ProductRegistry const &)
Definition: ProductProvenanceLookup.cc:37
edm::ProductProvenanceLookup::ProducedProvenanceInfo::productProvenance
ProductProvenance const * productProvenance() const noexcept
Definition: ProductProvenanceLookup.h:71