Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RColumn.hxx
Go to the documentation of this file.
1/// \file ROOT/RColumn.hxx
2/// \author Jakob Blomer <jblomer@cern.ch>
3/// \date 2018-10-09
4
5/*************************************************************************
6 * Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. *
7 * All rights reserved. *
8 * *
9 * For the licensing terms see $ROOTSYS/LICENSE. *
10 * For the list of contributors see $ROOTSYS/README/CREDITS. *
11 *************************************************************************/
12
13#ifndef ROOT_RColumn
14#define ROOT_RColumn
15
16#include <ROOT/RConfig.hxx> // for R__likely
18#include <ROOT/RNTupleTypes.hxx>
19#include <ROOT/RPage.hxx>
20#include <ROOT/RPageStorage.hxx>
21
22#include <TError.h>
23
24#include <cstring> // for memcpy
25#include <memory>
26#include <utility>
27
28namespace ROOT::Internal {
29
30// clang-format off
31/**
32\class ROOT::Internal::RColumn
33\ingroup NTuple
34\brief A column is a storage-backed array of a simple, fixed-size type, from which pages can be mapped into memory.
35*/
36// clang-format on
37class RColumn {
38private:
40 /// Columns belonging to the same field are distinguished by their order. E.g. for an std::string field, there is
41 /// the offset column with index 0 and the character value column with index 1.
42 std::uint32_t fIndex;
43 /// Fields can have multiple column representations, distinguished by representation index
44 std::uint16_t fRepresentationIndex;
49 /// The page into which new elements are being written. The page will initially be small
50 /// (RNTupleWriteOptions::fInitialUnzippedPageSize, which corresponds to fInitialElements) and expand as needed and
51 /// as memory for page buffers is still available (RNTupleWriteOptions::fPageBufferBudget) or the maximum page
52 /// size is reached (RNTupleWriteOptions::fMaxUnzippedPageSize).
54 /// The initial number of elements in a page
56 /// The number of elements written
58 /// The currently mapped page for reading
60 /// The column id in the column descriptor, once connected to a sink or source
62 /// Global index of the first element in this column; usually == 0, unless it is a deferred column
64 /// Used to pack and unpack pages on writing/reading
65 std::unique_ptr<ROOT::Internal::RColumnElementBase> fElement;
66 /// The column team is a set of columns that serve the same column index for different representation IDs.
67 /// Initially, the team has only one member, the very column it belongs to. Through MergeTeams(), two columns
68 /// can join forces. The team is used to react on suppressed columns: if the current team member has a suppressed
69 /// column for a MapPage() call, it get the page from the active column in the corresponding cluster.
70 std::vector<RColumn *> fTeam;
71 /// Points into fTeam to the column that successfully returned the last page.
72 std::size_t fLastGoodTeamIdx = 0;
73
74 RColumn(ROOT::ENTupleColumnType type, std::uint32_t columnIndex, std::uint16_t representationIndex);
75
76 /// Used when trying to append to a full write page. If possible, expand the page. Otherwise, flush and reset
77 /// to the minimal size.
79 {
80 auto newMaxElements = fWritePage.GetMaxElements() * 2;
81 if (newMaxElements * fElement->GetSize() > fPageSink->GetWriteOptions().GetMaxUnzippedPageSize()) {
82 newMaxElements = fPageSink->GetWriteOptions().GetMaxUnzippedPageSize() / fElement->GetSize();
83 }
84
85 if (newMaxElements == fWritePage.GetMaxElements()) {
86 // Maximum page size reached, flush and reset
87 Flush();
88 } else {
89 auto expandedPage = fPageSink->ReservePage(fHandleSink, newMaxElements);
90 if (expandedPage.IsNull()) {
91 Flush();
92 } else {
93 memcpy(expandedPage.GetBuffer(), fWritePage.GetBuffer(), fWritePage.GetNBytes());
94 expandedPage.Reset(fNElements);
95 expandedPage.GrowUnchecked(fWritePage.GetNElements());
96 fWritePage = std::move(expandedPage);
97 }
98 }
99
101 }
102
103public:
104 template <typename CppT>
105 static std::unique_ptr<RColumn>
106 Create(ROOT::ENTupleColumnType type, std::uint32_t columnIdx, std::uint16_t representationIdx)
107 {
108 auto column = std::unique_ptr<RColumn>(new RColumn(type, columnIdx, representationIdx));
109 column->fElement = ROOT::Internal::RColumnElementBase::Generate<CppT>(type);
110 return column;
111 }
112
113 RColumn(const RColumn &) = delete;
114 RColumn &operator=(const RColumn &) = delete;
115 ~RColumn();
116
117 /// Connect the column to a page sink. `firstElementIndex` can be used to specify the first column element index
118 /// with backing storage for this column. On read back, elements before `firstElementIndex` will cause the zero page
119 /// to be mapped.
121 ROOT::NTupleSize_t firstElementIndex = 0U);
122 /// Connect the column to a page source.
124
125 void Append(const void *from)
126 {
129 }
130
131 void *dst = fWritePage.GrowUnchecked(1);
132
133 std::memcpy(dst, from, fElement->GetSize());
134 fNElements++;
135 }
136
137 void AppendV(const void *from, std::size_t count)
138 {
139 auto src = reinterpret_cast<const unsigned char *>(from);
140 while (count > 0) {
141 std::size_t nElementsRemaining = fWritePage.GetMaxElements() - fWritePage.GetNElements();
142 if (nElementsRemaining == 0) {
144 nElementsRemaining = fWritePage.GetMaxElements() - fWritePage.GetNElements();
145 }
146
147 assert(nElementsRemaining > 0);
148 auto nBatch = std::min(count, nElementsRemaining);
149
150 void *dst = fWritePage.GrowUnchecked(nBatch);
151 std::memcpy(dst, src, nBatch * fElement->GetSize());
152 src += nBatch * fElement->GetSize();
153 count -= nBatch;
154 fNElements += nBatch;
155 }
156 }
157
158 void Read(const ROOT::NTupleSize_t globalIndex, void *to)
159 {
160 if (!fReadPageRef.Get().Contains(globalIndex)) {
161 MapPage(globalIndex);
162 }
163 const auto elemSize = fElement->GetSize();
164 void *from = static_cast<unsigned char *>(fReadPageRef.Get().GetBuffer()) +
165 (globalIndex - fReadPageRef.Get().GetGlobalRangeFirst()) * elemSize;
166 std::memcpy(to, from, elemSize);
167 }
168
169 void Read(RNTupleLocalIndex localIndex, void *to)
170 {
171 if (!fReadPageRef.Get().Contains(localIndex)) {
172 MapPage(localIndex);
173 }
174 const auto elemSize = fElement->GetSize();
175 void *from = static_cast<unsigned char *>(fReadPageRef.Get().GetBuffer()) +
176 (localIndex.GetIndexInCluster() - fReadPageRef.Get().GetLocalRangeFirst()) * elemSize;
177 std::memcpy(to, from, elemSize);
178 }
179
180 void ReadV(ROOT::NTupleSize_t globalIndex, ROOT::NTupleSize_t count, void *to)
181 {
182 const auto elemSize = fElement->GetSize();
183 auto tail = static_cast<unsigned char *>(to);
184
185 while (count > 0) {
186 if (!fReadPageRef.Get().Contains(globalIndex)) {
187 MapPage(globalIndex);
188 }
189 const ROOT::NTupleSize_t idxInPage = globalIndex - fReadPageRef.Get().GetGlobalRangeFirst();
190
191 const void *from = static_cast<unsigned char *>(fReadPageRef.Get().GetBuffer()) + idxInPage * elemSize;
192 const ROOT::NTupleSize_t nBatch = std::min(fReadPageRef.Get().GetNElements() - idxInPage, count);
193
194 std::memcpy(tail, from, elemSize * nBatch);
195
196 tail += nBatch * elemSize;
197 count -= nBatch;
198 globalIndex += nBatch;
199 }
200 }
201
202 void ReadV(RNTupleLocalIndex localIndex, ROOT::NTupleSize_t count, void *to)
203 {
204 const auto elemSize = fElement->GetSize();
205 auto tail = static_cast<unsigned char *>(to);
206
207 while (count > 0) {
208 if (!fReadPageRef.Get().Contains(localIndex)) {
209 MapPage(localIndex);
210 }
212
213 const void *from = static_cast<unsigned char *>(fReadPageRef.Get().GetBuffer()) + idxInPage * elemSize;
214 const ROOT::NTupleSize_t nBatch = std::min(count, fReadPageRef.Get().GetNElements() - idxInPage);
215
216 std::memcpy(tail, from, elemSize * nBatch);
217
218 tail += nBatch * elemSize;
219 count -= nBatch;
220 localIndex = RNTupleLocalIndex(localIndex.GetClusterId(), localIndex.GetIndexInCluster() + nBatch);
221 }
222 }
223
224 template <typename CppT>
225 CppT *Map(const ROOT::NTupleSize_t globalIndex)
226 {
227 ROOT::NTupleSize_t nItems;
228 return MapV<CppT>(globalIndex, nItems);
229 }
230
231 template <typename CppT>
232 CppT *Map(RNTupleLocalIndex localIndex)
233 {
234 ROOT::NTupleSize_t nItems;
235 return MapV<CppT>(localIndex, nItems);
236 }
237
238 template <typename CppT>
239 CppT *MapV(const ROOT::NTupleSize_t globalIndex, ROOT::NTupleSize_t &nItems)
240 {
241 if (R__unlikely(!fReadPageRef.Get().Contains(globalIndex))) {
242 MapPage(globalIndex);
243 }
244 // +1 to go from 0-based indexing to 1-based number of items
245 nItems = fReadPageRef.Get().GetGlobalRangeLast() - globalIndex + 1;
246 return reinterpret_cast<CppT *>(static_cast<unsigned char *>(fReadPageRef.Get().GetBuffer()) +
247 (globalIndex - fReadPageRef.Get().GetGlobalRangeFirst()) * sizeof(CppT));
248 }
249
250 template <typename CppT>
251 CppT *MapV(RNTupleLocalIndex localIndex, ROOT::NTupleSize_t &nItems)
252 {
253 if (!fReadPageRef.Get().Contains(localIndex)) {
254 MapPage(localIndex);
255 }
256 // +1 to go from 0-based indexing to 1-based number of items
257 nItems = fReadPageRef.Get().GetLocalRangeLast() - localIndex.GetIndexInCluster() + 1;
258 return reinterpret_cast<CppT *>(static_cast<unsigned char *>(fReadPageRef.Get().GetBuffer()) +
260 sizeof(CppT));
261 }
262
264 {
265 if (!fReadPageRef.Get().Contains(clusterIndex)) {
266 MapPage(clusterIndex);
267 }
268 return fReadPageRef.Get().GetClusterInfo().GetIndexOffset() + clusterIndex.GetIndexInCluster();
269 }
270
272 {
273 if (!fReadPageRef.Get().Contains(globalIndex)) {
274 MapPage(globalIndex);
275 }
277 globalIndex - fReadPageRef.Get().GetClusterInfo().GetIndexOffset());
278 }
279
280 /// For offset columns only, look at the two adjacent values that define a collection's coordinates
281 void GetCollectionInfo(const ROOT::NTupleSize_t globalIndex, RNTupleLocalIndex *collectionStart,
282 ROOT::NTupleSize_t *collectionSize)
283 {
284 ROOT::NTupleSize_t idxStart = 0;
285 ROOT::NTupleSize_t idxEnd;
286 // Try to avoid jumping back to the previous page and jumping back to the previous cluster
287 if (R__likely(globalIndex > 0)) {
288 if (R__likely(fReadPageRef.Get().Contains(globalIndex - 1))) {
289 idxStart = *Map<ROOT::Internal::RColumnIndex>(globalIndex - 1);
290 idxEnd = *Map<ROOT::Internal::RColumnIndex>(globalIndex);
291 if (R__unlikely(fReadPageRef.Get().GetClusterInfo().GetIndexOffset() == globalIndex))
292 idxStart = 0;
293 } else {
294 idxEnd = *Map<ROOT::Internal::RColumnIndex>(globalIndex);
295 auto selfOffset = fReadPageRef.Get().GetClusterInfo().GetIndexOffset();
296 idxStart = (globalIndex == selfOffset) ? 0 : *Map<ROOT::Internal::RColumnIndex>(globalIndex - 1);
297 }
298 } else {
299 idxEnd = *Map<ROOT::Internal::RColumnIndex>(globalIndex);
300 }
301 *collectionSize = idxEnd - idxStart;
302 *collectionStart = RNTupleLocalIndex(fReadPageRef.Get().GetClusterInfo().GetId(), idxStart);
303 }
304
305 void GetCollectionInfo(RNTupleLocalIndex localIndex, RNTupleLocalIndex *collectionStart,
306 ROOT::NTupleSize_t *collectionSize)
307 {
308 auto index = localIndex.GetIndexInCluster();
309 auto idxStart = (index == 0) ? 0 : *Map<ROOT::Internal::RColumnIndex>(localIndex - 1);
310 auto idxEnd = *Map<ROOT::Internal::RColumnIndex>(localIndex);
311 *collectionSize = idxEnd - idxStart;
312 *collectionStart = RNTupleLocalIndex(localIndex.GetClusterId(), idxStart);
313 }
314
315 /// Get the currently active cluster id
316 void GetSwitchInfo(ROOT::NTupleSize_t globalIndex, RNTupleLocalIndex *varIndex, std::uint32_t *tag)
317 {
318 auto varSwitch = Map<ROOT::Internal::RColumnSwitch>(globalIndex);
319 *varIndex = RNTupleLocalIndex(fReadPageRef.Get().GetClusterInfo().GetId(), varSwitch->GetIndex());
320 *tag = varSwitch->GetTag();
321 }
322
323 void Flush();
324 void CommitSuppressed();
325
326 void MapPage(ROOT::NTupleSize_t globalIndex) { R__ASSERT(TryMapPage(globalIndex)); }
327 void MapPage(RNTupleLocalIndex localIndex) { R__ASSERT(TryMapPage(localIndex)); }
328 bool TryMapPage(ROOT::NTupleSize_t globalIndex);
329 bool TryMapPage(RNTupleLocalIndex localIndex);
330
331 bool ReadPageContains(ROOT::NTupleSize_t globalIndex) const { return fReadPageRef.Get().Contains(globalIndex); }
332 bool ReadPageContains(RNTupleLocalIndex localIndex) const { return fReadPageRef.Get().Contains(localIndex); }
333
334 void MergeTeams(RColumn &other);
335
338 std::uint16_t GetBitsOnStorage() const
339 {
340 assert(fElement);
341 return static_cast<std::uint16_t>(fElement->GetBitsOnStorage());
342 }
343 std::optional<std::pair<double, double>> GetValueRange() const
344 {
345 assert(fElement);
346 return fElement->GetValueRange();
347 }
348 std::uint32_t GetIndex() const { return fIndex; }
349 std::uint16_t GetRepresentationIndex() const { return fRepresentationIndex; }
356
357 void SetBitsOnStorage(std::size_t bits) { fElement->SetBitsOnStorage(bits); }
358 std::size_t GetWritePageCapacity() const { return fWritePage.GetCapacity(); }
359 void SetValueRange(double min, double max) { fElement->SetValueRange(min, max); }
360}; // class RColumn
361
362} // namespace ROOT::Internal
363
364#endif
#define R__likely(expr)
Definition RConfig.hxx:569
#define R__unlikely(expr)
Definition RConfig.hxx:568
double * dst
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
Definition TError.h:139
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
The available trivial, native content types of a column.
A column element encapsulates the translation between basic C++ types and their column representation...
A column is a storage-backed array of a simple, fixed-size type, from which pages can be mapped into ...
Definition RColumn.hxx:37
void GetSwitchInfo(ROOT::NTupleSize_t globalIndex, RNTupleLocalIndex *varIndex, std::uint32_t *tag)
Get the currently active cluster id.
Definition RColumn.hxx:316
void GetCollectionInfo(RNTupleLocalIndex localIndex, RNTupleLocalIndex *collectionStart, ROOT::NTupleSize_t *collectionSize)
Definition RColumn.hxx:305
void Read(RNTupleLocalIndex localIndex, void *to)
Definition RColumn.hxx:169
static std::unique_ptr< RColumn > Create(ROOT::ENTupleColumnType type, std::uint32_t columnIdx, std::uint16_t representationIdx)
Definition RColumn.hxx:106
RColumn(ROOT::ENTupleColumnType type, std::uint32_t columnIndex, std::uint16_t representationIndex)
ROOT::Internal::RPageSource * GetPageSource() const
Definition RColumn.hxx:352
ROOT::NTupleSize_t GetGlobalIndex(RNTupleLocalIndex clusterIndex)
Definition RColumn.hxx:263
void HandleWritePageIfFull()
Used when trying to append to a full write page.
Definition RColumn.hxx:78
std::optional< std::pair< double, double > > GetValueRange() const
Definition RColumn.hxx:343
void MergeTeams(RColumn &other)
Definition RColumn.cxx:113
RColumn & operator=(const RColumn &)=delete
ROOT::Internal::RPageStorage::ColumnHandle_t GetHandleSink() const
Definition RColumn.hxx:355
void ReadV(RNTupleLocalIndex localIndex, ROOT::NTupleSize_t count, void *to)
Definition RColumn.hxx:202
std::vector< RColumn * > fTeam
The column team is a set of columns that serve the same column index for different representation IDs...
Definition RColumn.hxx:70
std::uint16_t GetRepresentationIndex() const
Definition RColumn.hxx:349
bool ReadPageContains(ROOT::NTupleSize_t globalIndex) const
Definition RColumn.hxx:331
std::size_t fLastGoodTeamIdx
Points into fTeam to the column that successfully returned the last page.
Definition RColumn.hxx:72
CppT * Map(const ROOT::NTupleSize_t globalIndex)
Definition RColumn.hxx:225
CppT * MapV(RNTupleLocalIndex localIndex, ROOT::NTupleSize_t &nItems)
Definition RColumn.hxx:251
RNTupleLocalIndex GetClusterIndex(ROOT::NTupleSize_t globalIndex)
Definition RColumn.hxx:271
RColumn(const RColumn &)=delete
std::uint16_t fRepresentationIndex
Fields can have multiple column representations, distinguished by representation index.
Definition RColumn.hxx:44
void ConnectPageSource(ROOT::DescriptorId_t fieldId, ROOT::Internal::RPageSource &pageSource)
Connect the column to a page source.
Definition RColumn.cxx:56
ROOT::Internal::RPageSource * fPageSource
Definition RColumn.hxx:46
ROOT::Internal::RColumnElementBase * GetElement() const
Definition RColumn.hxx:336
ROOT::Internal::RPageStorage::ColumnHandle_t GetHandleSource() const
Definition RColumn.hxx:354
void SetBitsOnStorage(std::size_t bits)
Definition RColumn.hxx:357
void Read(const ROOT::NTupleSize_t globalIndex, void *to)
Definition RColumn.hxx:158
CppT * Map(RNTupleLocalIndex localIndex)
Definition RColumn.hxx:232
ROOT::ENTupleColumnType GetType() const
Definition RColumn.hxx:337
ROOT::NTupleSize_t GetFirstElementIndex() const
Definition RColumn.hxx:351
bool ReadPageContains(RNTupleLocalIndex localIndex) const
Definition RColumn.hxx:332
void GetCollectionInfo(const ROOT::NTupleSize_t globalIndex, RNTupleLocalIndex *collectionStart, ROOT::NTupleSize_t *collectionSize)
For offset columns only, look at the two adjacent values that define a collection's coordinates.
Definition RColumn.hxx:281
void AppendV(const void *from, std::size_t count)
Definition RColumn.hxx:137
void ReadV(ROOT::NTupleSize_t globalIndex, ROOT::NTupleSize_t count, void *to)
Definition RColumn.hxx:180
std::size_t GetWritePageCapacity() const
Definition RColumn.hxx:358
void SetValueRange(double min, double max)
Definition RColumn.hxx:359
ROOT::DescriptorId_t GetOnDiskId() const
Definition RColumn.hxx:350
ROOT::Internal::RPageRef fReadPageRef
The currently mapped page for reading.
Definition RColumn.hxx:59
ROOT::Internal::RPage fWritePage
The page into which new elements are being written.
Definition RColumn.hxx:53
CppT * MapV(const ROOT::NTupleSize_t globalIndex, ROOT::NTupleSize_t &nItems)
Definition RColumn.hxx:239
ROOT::Internal::RPageSink * fPageSink
Definition RColumn.hxx:45
ROOT::DescriptorId_t fOnDiskId
The column id in the column descriptor, once connected to a sink or source.
Definition RColumn.hxx:61
std::uint32_t fIndex
Columns belonging to the same field are distinguished by their order.
Definition RColumn.hxx:42
bool TryMapPage(ROOT::NTupleSize_t globalIndex)
Definition RColumn.cxx:83
ROOT::Internal::RPageStorage::ColumnHandle_t fHandleSink
Definition RColumn.hxx:47
ROOT::NTupleSize_t fFirstElementIndex
Global index of the first element in this column; usually == 0, unless it is a deferred column.
Definition RColumn.hxx:63
ROOT::NTupleSize_t fNElements
The number of elements written.
Definition RColumn.hxx:57
void MapPage(ROOT::NTupleSize_t globalIndex)
Definition RColumn.hxx:326
void ConnectPageSink(ROOT::DescriptorId_t fieldId, ROOT::Internal::RPageSink &pageSink, ROOT::NTupleSize_t firstElementIndex=0U)
Connect the column to a page sink.
Definition RColumn.cxx:39
ROOT::Internal::RPageStorage::ColumnHandle_t fHandleSource
Definition RColumn.hxx:48
std::uint16_t GetBitsOnStorage() const
Definition RColumn.hxx:338
std::uint32_t GetIndex() const
Definition RColumn.hxx:348
void Append(const void *from)
Definition RColumn.hxx:125
std::unique_ptr< ROOT::Internal::RColumnElementBase > fElement
Used to pack and unpack pages on writing/reading.
Definition RColumn.hxx:65
ROOT::Internal::RPageSink * GetPageSink() const
Definition RColumn.hxx:353
void MapPage(RNTupleLocalIndex localIndex)
Definition RColumn.hxx:327
ROOT::ENTupleColumnType fType
Definition RColumn.hxx:39
ROOT::NTupleSize_t fInitialNElements
The initial number of elements in a page.
Definition RColumn.hxx:55
Reference to a page stored in the page pool.
const RPage & Get() const
Abstract interface to write data into an ntuple.
virtual ROOT::Internal::RPage ReservePage(ColumnHandle_t columnHandle, std::size_t nElements)
Get a new, empty page for the given column that can be filled with up to nElements; nElements must be...
const ROOT::RNTupleWriteOptions & GetWriteOptions() const
Returns the sink's write options.
Abstract interface to read data from an ntuple.
ROOT::NTupleSize_t GetIndexOffset() const
Definition RPage.hxx:63
ROOT::DescriptorId_t GetId() const
Definition RPage.hxx:62
A page is a slice of a column that is mapped into memory.
Definition RPage.hxx:43
ROOT::NTupleSize_t GetGlobalRangeLast() const
Definition RPage.hxx:123
std::uint32_t GetNElements() const
Definition RPage.hxx:120
std::size_t GetNBytes() const
The space taken by column elements in the buffer.
Definition RPage.hxx:111
void * GrowUnchecked(std::uint32_t nElements)
Increases the number elements in the page.
Definition RPage.hxx:149
void * GetBuffer() const
Definition RPage.hxx:142
ROOT::NTupleSize_t GetLocalRangeLast() const
Definition RPage.hxx:125
std::uint32_t GetMaxElements() const
Definition RPage.hxx:121
std::size_t GetCapacity() const
Definition RPage.hxx:115
bool Contains(ROOT::NTupleSize_t globalIndex) const
Definition RPage.hxx:128
const RClusterInfo & GetClusterInfo() const
Definition RPage.hxx:126
ROOT::NTupleSize_t GetGlobalRangeFirst() const
Definition RPage.hxx:122
ROOT::NTupleSize_t GetLocalRangeFirst() const
Definition RPage.hxx:124
Addresses a column element or field item relative to a particular cluster, instead of a global NTuple...
ROOT::NTupleSize_t GetIndexInCluster() const
ROOT::DescriptorId_t GetClusterId() const
std::size_t GetMaxUnzippedPageSize() const
std::uint64_t DescriptorId_t
Distriniguishes elements of the same type within a descriptor, e.g. different fields.
std::uint64_t NTupleSize_t
Integer type long enough to hold the maximum number of entries in a column.
constexpr DescriptorId_t kInvalidDescriptorId