File indexing completed on 2025-09-16 09:08:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef ROOT_RNTupleRange
0015 #define ROOT_RNTupleRange
0016
0017 #include <ROOT/RNTupleUtil.hxx>
0018
0019 namespace ROOT {
0020
0021
0022
0023
0024
0025
0026
0027
0028 class RNTupleGlobalRange {
0029 private:
0030 ROOT::NTupleSize_t fStart;
0031 ROOT::NTupleSize_t fEnd;
0032
0033 public:
0034 class RIterator {
0035 private:
0036 ROOT::NTupleSize_t fIndex = ROOT::kInvalidNTupleIndex;
0037
0038 public:
0039 using iterator = RIterator;
0040 using iterator_category = std::forward_iterator_tag;
0041 using value_type = ROOT::NTupleSize_t;
0042 using difference_type = ROOT::NTupleSize_t;
0043 using pointer = ROOT::NTupleSize_t *;
0044 using reference = ROOT::NTupleSize_t &;
0045
0046 RIterator() = default;
0047 explicit RIterator(ROOT::NTupleSize_t index) : fIndex(index) {}
0048 ~RIterator() = default;
0049
0050 iterator operator++(int)
0051 {
0052 auto r = *this;
0053 fIndex++;
0054 return r;
0055 }
0056 iterator &operator++()
0057 {
0058 ++fIndex;
0059 return *this;
0060 }
0061 reference operator*() { return fIndex; }
0062 pointer operator->() { return &fIndex; }
0063 bool operator==(const iterator &rh) const { return fIndex == rh.fIndex; }
0064 bool operator!=(const iterator &rh) const { return fIndex != rh.fIndex; }
0065 };
0066
0067 RNTupleGlobalRange(ROOT::NTupleSize_t start, ROOT::NTupleSize_t end) : fStart(start), fEnd(end) {}
0068 RIterator begin() const { return RIterator(fStart); }
0069 RIterator end() const { return RIterator(fEnd); }
0070 ROOT::NTupleSize_t size() const { return fEnd - fStart; }
0071 bool IsValid() const { return (fStart != ROOT::kInvalidNTupleIndex) && (fEnd != ROOT::kInvalidNTupleIndex); }
0072 };
0073
0074
0075
0076
0077
0078
0079
0080
0081 class RNTupleLocalRange {
0082 private:
0083 const ROOT::DescriptorId_t fClusterId;
0084 const ROOT::NTupleSize_t fStart;
0085 const ROOT::NTupleSize_t fEnd;
0086
0087 public:
0088 class RIterator {
0089 private:
0090 RNTupleLocalIndex fLocalIndex;
0091
0092 public:
0093 using iterator = RIterator;
0094 using iterator_category = std::forward_iterator_tag;
0095 using value_type = RNTupleLocalIndex;
0096 using difference_type = RNTupleLocalIndex;
0097 using pointer = RNTupleLocalIndex *;
0098 using reference = RNTupleLocalIndex &;
0099
0100 RIterator() = default;
0101 explicit RIterator(RNTupleLocalIndex localIndex) : fLocalIndex(localIndex) {}
0102 ~RIterator() = default;
0103
0104 iterator operator++(int)
0105 {
0106 auto r = *this;
0107 fLocalIndex++;
0108 return r;
0109 }
0110 iterator &operator++()
0111 {
0112 fLocalIndex++;
0113 return *this;
0114 }
0115 reference operator*() { return fLocalIndex; }
0116 pointer operator->() { return &fLocalIndex; }
0117 bool operator==(const iterator &rh) const { return fLocalIndex == rh.fLocalIndex; }
0118 bool operator!=(const iterator &rh) const { return fLocalIndex != rh.fLocalIndex; }
0119 };
0120
0121 RNTupleLocalRange(ROOT::DescriptorId_t clusterId, ROOT::NTupleSize_t start, ROOT::NTupleSize_t end)
0122 : fClusterId(clusterId), fStart(start), fEnd(end)
0123 {
0124 }
0125 RIterator begin() const { return RIterator(RNTupleLocalIndex(fClusterId, fStart)); }
0126 RIterator end() const { return RIterator(RNTupleLocalIndex(fClusterId, fEnd)); }
0127 ROOT::NTupleSize_t size() const { return fEnd - fStart; }
0128 };
0129
0130 }
0131
0132 #endif