Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 13:27:44

0001 #ifndef FWCore_Framework_ESRecordsToProxyIndices_h
0002 #define FWCore_Framework_ESRecordsToProxyIndices_h
0003 // -*- C++ -*-
0004 //
0005 // Package:     Framework
0006 // Class  :     ESRecordsToProxyIndices
0007 //
0008 /**\class ESRecordsToProxyIndices ESRecordsToProxyIndices.h FWCore/Framework/interface/ESRecordsToProxyIndices.h
0009 
0010  Description: Key used to identify data within a EventSetupRecord
0011 
0012  Usage:
0013     <usage>
0014 
0015 */
0016 //
0017 // Author:      Chris Jones
0018 // Created:     Tues Feb 12 14:31:03 EST 2019
0019 //
0020 
0021 // system include files
0022 #include <limits>
0023 #include <vector>
0024 
0025 // user include files
0026 #include "FWCore/Framework/interface/DataKey.h"
0027 #include "FWCore/Framework/interface/EventSetupRecordKey.h"
0028 #include "FWCore/Framework/interface/ESTagGetter.h"
0029 #include "FWCore/Utilities/interface/ESIndices.h"
0030 
0031 // forward declarations
0032 namespace edm::eventsetup {
0033   struct ComponentDescription;
0034 
0035   class ESRecordsToProxyIndices {
0036   public:
0037     ESRecordsToProxyIndices(std::vector<EventSetupRecordKey> iRecords);
0038 
0039     // ---------- const member functions ---------------------
0040     ///If the index is not found, returns missingProxyIndex()
0041     ESProxyIndex indexInRecord(EventSetupRecordKey const& iRK, DataKey const& iDK) const noexcept;
0042 
0043     ComponentDescription const* component(EventSetupRecordKey const& iRK, DataKey const& iDK) const noexcept;
0044 
0045     ///Returns ESTagGetter for all products matching the type iTT for record iRK
0046     ESTagGetter makeTagGetter(EventSetupRecordKey const& iRK, TypeTag const& iTT) const;
0047 
0048     static constexpr ESProxyIndex missingProxyIndex() noexcept { return ESProxyIndex{std::numeric_limits<int>::max()}; }
0049     static constexpr ESRecordIndex missingRecordIndex() noexcept {
0050       return ESRecordIndex{ESRecordIndex::invalidValue()};
0051     }
0052 
0053     ESRecordIndex recordIndexFor(EventSetupRecordKey const& iRK) const noexcept;
0054 
0055     std::pair<std::vector<DataKey>::const_iterator, std::vector<DataKey>::const_iterator> keysForRecord(
0056         EventSetupRecordKey const& iRK) const noexcept;
0057     ///The sorted list of keys
0058     std::vector<EventSetupRecordKey> recordKeys() const noexcept { return recordKeys_; }
0059 
0060     // ---------- member functions ---------------------------
0061     ///This should be called for all records in the list passed to the constructor and
0062     /// in the same order as the list.
0063     unsigned int dataKeysInRecord(unsigned int iRecordIndex,
0064                                   EventSetupRecordKey const& iRecord,
0065                                   std::vector<DataKey> const& iDataKeys,
0066                                   std::vector<ComponentDescription const*> const& iComponents);
0067 
0068   private:
0069     // ---------- member data --------------------------------
0070     std::vector<EventSetupRecordKey> recordKeys_;
0071     //for each item in recordKeys_ this holds the index to the first
0072     // DataKey for that item in dataKeys_
0073     // recordOffset_ is 1 size larger than recordKeys_ with the
0074     // last entry being dataKeys_.size()
0075     std::vector<unsigned int> recordOffsets_;
0076     std::vector<DataKey> dataKeys_;
0077     std::vector<ComponentDescription const*> components_;
0078   };
0079 
0080 }  // namespace edm::eventsetup
0081 #endif