Logo ROOT  
Reference Guide
RNTupleDescriptor.hxx
Go to the documentation of this file.
1 /// \file ROOT/RNTupleDescriptor.hxx
2 /// \ingroup NTuple ROOT7
3 /// \author Jakob Blomer <jblomer@cern.ch>
4 /// \date 2018-07-19
5 /// \warning This is part of the ROOT 7 prototype! It will change without notice. It might trigger earthquakes. Feedback
6 /// is welcome!
7 
8 /*************************************************************************
9  * Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. *
10  * All rights reserved. *
11  * *
12  * For the licensing terms see $ROOTSYS/LICENSE. *
13  * For the list of contributors see $ROOTSYS/README/CREDITS. *
14  *************************************************************************/
15 
16 #ifndef ROOT7_RNTupleDescriptor
17 #define ROOT7_RNTupleDescriptor
18 
19 #include <ROOT/RColumnModel.hxx>
20 #include <ROOT/RNTupleUtil.hxx>
21 #include <ROOT/RStringView.hxx>
22 
23 #include <algorithm>
24 #include <chrono>
25 #include <functional>
26 #include <memory>
27 #include <ostream>
28 #include <vector>
29 #include <string>
30 #include <unordered_map>
31 
32 namespace ROOT {
33 namespace Experimental {
34 
35 class RNTupleDescriptorBuilder;
36 class RNTupleModel;
37 
38 // clang-format off
39 /**
40 \class ROOT::Experimental::RFieldDescriptor
41 \ingroup NTuple
42 \brief Meta-data stored for every field of an ntuple
43 */
44 // clang-format on
45 class RFieldDescriptor {
46  friend class RNTupleDescriptorBuilder;
47 
48 private:
50  /// The version of the C++-type-to-column translation mechanics
51  RNTupleVersion fFieldVersion;
52  /// The version of the C++ type itself
53  RNTupleVersion fTypeVersion;
54  /// The leaf name, not including parent fields
55  std::string fFieldName;
56  /// Free text set by the user
57  std::string fFieldDescription;
58  /// The C++ type that was used when writing the field
59  std::string fTypeName;
60  /// The number of elements per entry for fixed-size arrays
61  std::uint64_t fNRepetitions;
62  /// The structural information carried by this field in the data model tree
64  /// Establishes sub field relationships, such as classes and collections
66  /// The pointers in the other direction from parent to children. They are serialized, too, to keep the
67  /// order of sub fields.
68  std::vector<DescriptorId_t> fLinkIds;
69 
70 public:
71  /// In order to handle changes to the serialization routine in future ntuple versions
72  static constexpr std::uint16_t kFrameVersionCurrent = 0;
73  static constexpr std::uint16_t kFrameVersionMin = 0;
74 
75  RFieldDescriptor() = default;
76  RFieldDescriptor(const RFieldDescriptor &other) = delete;
77  RFieldDescriptor &operator =(const RFieldDescriptor &other) = delete;
78  RFieldDescriptor(RFieldDescriptor &&other) = default;
79  RFieldDescriptor &operator =(RFieldDescriptor &&other) = default;
80 
81  bool operator==(const RFieldDescriptor &other) const;
82 
83  DescriptorId_t GetId() const { return fFieldId; }
86  std::string GetFieldName() const { return fFieldName; }
87  std::string GetFieldDescription() const { return fFieldDescription; }
88  std::string GetTypeName() const { return fTypeName; }
89  std::uint64_t GetNRepetitions() const { return fNRepetitions; }
90  ENTupleStructure GetStructure() const { return fStructure; }
91  DescriptorId_t GetParentId() const { return fParentId; }
92  const std::vector<DescriptorId_t> &GetLinkIds() const { return fLinkIds; }
93 };
94 
95 
96 // clang-format off
97 /**
98 \class ROOT::Experimental::RColumnDescriptor
99 \ingroup NTuple
100 \brief Meta-data stored for every column of an ntuple
101 */
102 // clang-format on
105 
106 private:
108  /// Versions can change, e.g., when new column types are added
110  /// Contains the column type and whether it is sorted
112  /// Every column belongs to one and only one field
114  /// A field can be serialized into several columns, which are numbered from zero to $n$
115  std::uint32_t fIndex;
116 
117 public:
118  /// In order to handle changes to the serialization routine in future ntuple versions
119  static constexpr std::uint16_t kFrameVersionCurrent = 0;
120  static constexpr std::uint16_t kFrameVersionMin = 0;
121 
122  RColumnDescriptor() = default;
123  RColumnDescriptor(const RColumnDescriptor &other) = delete;
124  RColumnDescriptor &operator =(const RColumnDescriptor &other) = delete;
126  RColumnDescriptor &operator =(RColumnDescriptor &&other) = default;
127 
128  bool operator==(const RColumnDescriptor &other) const;
129 
130  DescriptorId_t GetId() const { return fColumnId; }
131  RNTupleVersion GetVersion() const { return fVersion; }
132  RColumnModel GetModel() const { return fModel; }
133  std::uint32_t GetIndex() const { return fIndex; }
134  DescriptorId_t GetFieldId() const { return fFieldId; }
135 };
136 
137 
138 // clang-format off
139 /**
140 \class ROOT::Experimental::RClusterDescriptor
141 \ingroup NTuple
142 \brief Meta-data for a set of ntuple clusters
143 
144 The cluster descriptor might carry information of only a subset of available clusters, for instance if multiple
145 files are chained and not all of them have been processed yet.
146 */
147 // clang-format on
148 class RClusterDescriptor {
149  friend class RNTupleDescriptorBuilder;
150 
151 public:
152  /// Generic information about the physical location of data. Values depend on the concrete storage type. E.g.,
153  /// for a local file fUrl might be unsused and fPosition might be a file offset. Objects on storage can be compressed
154  /// and therefore we need to store their actual size.
155  struct RLocator {
156  std::int64_t fPosition = 0;
157  std::uint32_t fBytesOnStorage = 0;
158  std::string fUrl;
159 
160  bool operator==(const RLocator &other) const {
161  return fPosition == other.fPosition && fBytesOnStorage == other.fBytesOnStorage && fUrl == other.fUrl;
162  }
163  };
164 
165  /// The window of element indexes of a particular column in a particular cluster
166  struct RColumnRange {
168  /// A 64bit element index
170  /// A 32bit value for the number of column elements in the cluster
172  /// The usual format for ROOT compression settings (see Compression.h).
173  /// The pages of a particular column in a particular cluster are all compressed with the same settings.
174  std::int64_t fCompressionSettings = 0;
175 
176  // TODO(jblomer): we perhaps want to store summary information, such as average, min/max, etc.
177  // Should this be done on the field level?
178 
179  bool operator==(const RColumnRange &other) const {
180  return fColumnId == other.fColumnId && fFirstElementIndex == other.fFirstElementIndex &&
181  fNElements == other.fNElements && fCompressionSettings == other.fCompressionSettings;
182  }
183 
184  bool Contains(NTupleSize_t index) const {
185  return (fFirstElementIndex <= index && (fFirstElementIndex + fNElements) > index);
186  }
187  };
188 
189  /// Records the parition of data into pages for a particular column in a particular cluster
190  struct RPageRange {
191  /// We do not need to store the element size / uncompressed page size because we know to which column
192  /// the page belongs
193  struct RPageInfo {
194  /// The sum of the elements of all the pages must match the corresponding fNElements field in fColumnRanges
196  /// The meaning of fLocator depends on the storage backend.
198 
199  bool operator==(const RPageInfo &other) const {
200  return fNElements == other.fNElements && fLocator == other.fLocator;
201  }
202  };
203 
204  RPageRange() = default;
205  RPageRange(const RPageRange &other) = delete;
206  RPageRange &operator =(const RPageRange &other) = delete;
207  RPageRange(RPageRange &&other) = default;
208  RPageRange &operator =(RPageRange &&other) = default;
209 
211  std::vector<RPageInfo> fPageInfos;
212 
213  bool operator==(const RPageRange &other) const {
214  return fColumnId == other.fColumnId && fPageInfos == other.fPageInfos;
215  }
216  };
217 
218 private:
220  /// Future versions of the cluster descriptor might add more meta-data, e.g. a semantic checksum
222  /// Clusters can be swapped by adjusting the entry offsets
225  /// For pre-fetching / caching an entire contiguous cluster
227 
228  std::unordered_map<DescriptorId_t, RColumnRange> fColumnRanges;
229  std::unordered_map<DescriptorId_t, RPageRange> fPageRanges;
230 
231 public:
232  /// In order to handle changes to the serialization routine in future ntuple versions
233  static constexpr std::uint16_t kFrameVersionCurrent = 0;
234  static constexpr std::uint16_t kFrameVersionMin = 0;
235 
236  RClusterDescriptor() = default;
237  RClusterDescriptor(const RClusterDescriptor &other) = delete;
239  RClusterDescriptor(RClusterDescriptor &&other) = default;
241 
242  bool operator==(const RClusterDescriptor &other) const;
243 
244  DescriptorId_t GetId() const { return fClusterId; }
245  RNTupleVersion GetVersion() const { return fVersion; }
247  ClusterSize_t GetNEntries() const { return fNEntries; }
248  RLocator GetLocator() const { return fLocator; }
249  const RColumnRange &GetColumnRange(DescriptorId_t columnId) const { return fColumnRanges.at(columnId); }
250  const RPageRange &GetPageRange(DescriptorId_t columnId) const { return fPageRanges.at(columnId); }
251 };
252 
253 
254 // clang-format off
255 /**
256 \class ROOT::Experimental::RNTupleDescriptor
257 \ingroup NTuple
258 \brief The on-storage meta-data of an ntuple
259 
260 Represents the on-disk (on storage) information about an ntuple. The meta-data consists of a header and one or
261 several footers. The header carries the ntuple schema, i.e. the fields and the associated columns and their
262 relationships. The footer(s) carry information about one or several clusters. For every cluster, a footer stores
263 its location and size, and for every column the range of element indexes as well as a list of pages and page
264 locations.
265 
266 The descriptor provide machine-independent (de-)serialization of headers and footers, and it provides lookup routines
267 for ntuple objects (pages, clusters, ...). It is supposed to be usable by all RPageStorage implementations.
268 
269 The serialization does not use standard ROOT streamers in order to not let it depend on libCore. The serialization uses
270 the concept of frames: header, footer, and substructures have a preamble with version numbers and the size of the
271 writte struct. This allows for forward and backward compatibility when the meta-data evolves.
272 */
273 // clang-format on
274 class RNTupleDescriptor {
275  friend class RNTupleDescriptorBuilder;
276 
277 private:
278  /// The ntuple name needs to be unique in a given storage location (file)
279  std::string fName;
280  /// Free text from the user
281  std::string fDescription;
282  /// The origin of the data
283  std::string fAuthor;
284  /// The current responsible for storing the data
285  std::string fCustodian;
286  /// The time stamp of the ntuple data (immutable)
287  std::chrono::system_clock::time_point fTimeStampData;
288  /// The time stamp of writing the data to storage, which gets updated when re-written
289  std::chrono::system_clock::time_point fTimeStampWritten;
290  /// The version evolves with the ntuple summary meta-data
292  /// Every NTuple gets a unique identifier
294  /// Column sets that are created as derived sets from existing NTuples share the same group id.
295  /// NTuples in the same group have the same number of entries and are supposed to contain associated data.
297 
298  std::unordered_map<DescriptorId_t, RFieldDescriptor> fFieldDescriptors;
299  std::unordered_map<DescriptorId_t, RColumnDescriptor> fColumnDescriptors;
300  /// May contain only a subset of all the available clusters, e.g. the clusters of the current file
301  /// from a chain of files
302  std::unordered_map<DescriptorId_t, RClusterDescriptor> fClusterDescriptors;
303 
304 public:
305  // clang-format off
306  /**
307  \class ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange
308  \ingroup NTuple
309  \brief Used to loop over a field's child fields
310  */
311  // clang-format on
312  class RFieldDescriptorRange {
313  private:
314  /// The associated NTuple for this range.
315  const RNTupleDescriptor& fNTuple;
316  /// The descriptor ids of the child fields. These may be sorted using
317  /// a comparison function.
318  std::vector<DescriptorId_t> fFieldChildren = {};
319  public:
320  class RIterator {
321  private:
322  /// The enclosing range's NTuple.
323  const RNTupleDescriptor& fNTuple;
324  /// The enclosing range's descriptor id list.
325  const std::vector<DescriptorId_t>& fFieldChildren;
326  std::size_t fIndex = 0;
327  public:
328  using iterator_category = std::forward_iterator_tag;
329  using iterator = RIterator;
331  using difference_type = std::ptrdiff_t;
333  using reference = const RFieldDescriptor&;
334 
335  RIterator(const RNTupleDescriptor& ntuple, const std::vector<DescriptorId_t>& fieldChildren,
336  std::size_t index) : fNTuple(ntuple), fFieldChildren(fieldChildren), fIndex(index) {}
337  iterator operator++() { ++fIndex; return *this; }
341  );
342  }
343  bool operator!=(const iterator& rh) const { return fIndex != rh.fIndex; }
344  bool operator==(const iterator& rh) const { return fIndex == rh.fIndex; }
345  };
346  RFieldDescriptorRange(const RNTupleDescriptor& ntuple, const RFieldDescriptor& field)
347  : fNTuple(ntuple), fFieldChildren(field.GetLinkIds()) {}
348  /// Sort the range using an arbitrary comparison function.
350  const std::function<bool(DescriptorId_t, DescriptorId_t)>& comparator)
351  : fNTuple(ntuple), fFieldChildren(field.GetLinkIds())
352  {
353  std::sort(fFieldChildren.begin(), fFieldChildren.end(), comparator);
354  }
357  }
360  }
361  };
362 
363  /// In order to handle changes to the serialization routine in future ntuple versions
364  static constexpr std::uint16_t kFrameVersionCurrent = 0;
365  static constexpr std::uint16_t kFrameVersionMin = 0;
366  /// The preamble is sufficient to get the length of the header
367  static constexpr unsigned int kNBytesPreamble = 8;
368  /// The last few bytes after the footer store the length of footer and header
369  static constexpr unsigned int kNBytesPostscript = 16;
370 
371  RNTupleDescriptor() = default;
372  RNTupleDescriptor(const RNTupleDescriptor &other) = delete;
373  RNTupleDescriptor &operator=(const RNTupleDescriptor &other) = delete;
374  RNTupleDescriptor(RNTupleDescriptor &&other) = default;
375  RNTupleDescriptor &operator=(RNTupleDescriptor &&other) = default;
376 
377  bool operator ==(const RNTupleDescriptor &other) const;
378 
379  /// We deliberately do not use ROOT's built-in serialization in order to allow for use of RNTuple's without libCore
380  /// Serializes the global ntuple information as well as the column and field schemata
381  /// Returns the number of bytes and fills buffer if it is not nullptr.
382  /// TODO(jblomer): instead of runtime testing for nullptr, there should be a template for the case where
383  /// only the size of the buffer is required.
384  std::uint32_t SerializeHeader(void* buffer) const;
385  /// Serializes cluster meta data. Returns the number of bytes and fills buffer if it is not nullptr.
386  std::uint32_t SerializeFooter(void* buffer) const;
387  /// Given kNBytesPostscript bytes, extract the header and footer lengths in bytes
388  static void LocateMetadata(const void *postscript, std::uint32_t &szHeader, std::uint32_t &szFooter);
389 
390  const RFieldDescriptor& GetFieldDescriptor(DescriptorId_t fieldId) const {
391  return fFieldDescriptors.at(fieldId);
392  }
393  const RColumnDescriptor& GetColumnDescriptor(DescriptorId_t columnId) const {
394  return fColumnDescriptors.at(columnId);
395  }
396  const RClusterDescriptor& GetClusterDescriptor(DescriptorId_t clusterId) const {
397  return fClusterDescriptors.at(clusterId);
398  }
399 
400  RFieldDescriptorRange GetFieldRange(const RFieldDescriptor& fieldDesc) const {
401  return RFieldDescriptorRange(*this, fieldDesc);
402  }
403  RFieldDescriptorRange GetFieldRange(const RFieldDescriptor& fieldDesc,
404  const std::function<bool(DescriptorId_t, DescriptorId_t)>& comparator) const
405  {
406  return RFieldDescriptorRange(*this, fieldDesc, comparator);
407  }
409  return GetFieldRange(GetFieldDescriptor(fieldId));
410  }
411  RFieldDescriptorRange GetFieldRange(DescriptorId_t fieldId,
412  const std::function<bool(DescriptorId_t, DescriptorId_t)>& comparator) const
413  {
414  return GetFieldRange(GetFieldDescriptor(fieldId), comparator);
415  }
416  RFieldDescriptorRange GetTopLevelFields() const {
417  return GetFieldRange(GetFieldZeroId());
418  }
419  RFieldDescriptorRange GetTopLevelFields(
420  const std::function<bool(DescriptorId_t, DescriptorId_t)>& comparator) const
421  {
422  return GetFieldRange(GetFieldZeroId(), comparator);
423  }
424 
425  std::string GetName() const { return fName; }
426  std::string GetDescription() const { return fDescription; }
427  std::string GetAuthor() const { return fAuthor; }
428  std::string GetCustodian() const { return fCustodian; }
429  std::chrono::system_clock::time_point GetTimeStampData() const { return fTimeStampData; }
430  std::chrono::system_clock::time_point GetTimeStampWritten() const { return fTimeStampWritten; }
431  RNTupleVersion GetVersion() const { return fVersion; }
432  RNTupleUuid GetOwnUuid() const { return fOwnUuid; }
433  RNTupleUuid GetGroupUuid() const { return fGroupUuid; }
434 
435  std::size_t GetNFields() const { return fFieldDescriptors.size(); }
436  std::size_t GetNColumns() const { return fColumnDescriptors.size(); }
437  std::size_t GetNClusters() const { return fClusterDescriptors.size(); }
438 
439  // The number of entries as seen with the currently loaded cluster meta-data; there might be more
442 
443  /// Returns the logical parent of all top-level NTuple data fields.
446  /// Searches for a top-level field
448  DescriptorId_t FindColumnId(DescriptorId_t fieldId, std::uint32_t columnIndex) const;
452 
453  /// Re-create the C++ model from the stored meta-data
454  std::unique_ptr<RNTupleModel> GenerateModel() const;
455  void PrintInfo(std::ostream &output) const;
456 };
457 
458 
459 // clang-format off
460 /**
461 \class ROOT::Experimental::RNTupleDescriptorBuilder
462 \ingroup NTuple
463 \brief A helper class for piece-wise construction of an RNTupleDescriptor
464 
465 Used by RPageStorage implementations in order to construct the RNTupleDescriptor from the various header parts.
466 */
467 // clang-format on
469 private:
471 
472 public:
473  bool IsValid() const { return true; /* TODO(jblomer) */}
474  const RNTupleDescriptor& GetDescriptor() const { return fDescriptor; }
475  RNTupleDescriptor MoveDescriptor();
476 
477  void SetNTuple(const std::string_view name, const std::string_view description, const std::string_view author,
478  const RNTupleVersion &version, const RNTupleUuid &uuid);
479 
480  void AddField(DescriptorId_t fieldId, const RNTupleVersion &fieldVersion, const RNTupleVersion &typeVersion,
481  std::string_view fieldName, std::string_view typeName, std::uint64_t nRepetitions,
482  ENTupleStructure structure);
483  void AddFieldLink(DescriptorId_t fieldId, DescriptorId_t linkId);
484 
485  void AddColumn(DescriptorId_t columnId, DescriptorId_t fieldId,
486  const RNTupleVersion &version, const RColumnModel &model, std::uint32_t index);
487 
488  void SetFromHeader(void* headerBuffer);
489 
490  void AddCluster(DescriptorId_t clusterId, RNTupleVersion version,
491  NTupleSize_t firstEntryIndex, ClusterSize_t nEntries);
493  void AddClusterColumnRange(DescriptorId_t clusterId, const RClusterDescriptor::RColumnRange &columnRange);
495 
496  void AddClustersFromFooter(void* footerBuffer);
497 };
498 
499 } // namespace Experimental
500 } // namespace ROOT
501 
502 #endif
ROOT::Experimental::RClusterDescriptor::fLocator
RLocator fLocator
For pre-fetching / caching an entire contiguous cluster.
Definition: RNTupleDescriptor.hxx:238
ROOT::Experimental::RNTupleDescriptor::fOwnUuid
RNTupleUuid fOwnUuid
Every NTuple gets a unique identifier.
Definition: RNTupleDescriptor.hxx:305
ROOT::Experimental::RClusterDescriptor::GetColumnRange
const RColumnRange & GetColumnRange(DescriptorId_t columnId) const
Definition: RNTupleDescriptor.hxx:261
ROOT::Experimental::RClusterDescriptor::RClusterDescriptor
RClusterDescriptor()=default
ROOT::Experimental::RNTupleDescriptor::fName
std::string fName
The ntuple name needs to be unique in a given storage location (file)
Definition: RNTupleDescriptor.hxx:291
ROOT::Experimental::RNTupleDescriptor::GetNFields
std::size_t GetNFields() const
Definition: RNTupleDescriptor.hxx:447
ROOT::Experimental::RNTupleDescriptor::GetTimeStampWritten
std::chrono::system_clock::time_point GetTimeStampWritten() const
Definition: RNTupleDescriptor.hxx:442
ROOT::Experimental::RNTupleDescriptor::fAuthor
std::string fAuthor
The origin of the data.
Definition: RNTupleDescriptor.hxx:295
ROOT::Experimental::RClusterDescriptor::RColumnRange
The window of element indexes of a particular column in a particular cluster.
Definition: RNTupleDescriptor.hxx:178
ROOT::Experimental::RClusterDescriptor::RPageRange::fPageInfos
std::vector< RPageInfo > fPageInfos
Definition: RNTupleDescriptor.hxx:223
ROOT::Experimental::RFieldDescriptor::GetTypeVersion
RNTupleVersion GetTypeVersion() const
Definition: RNTupleDescriptor.hxx:97
ROOT::Experimental::RClusterDescriptor::operator=
RClusterDescriptor & operator=(const RClusterDescriptor &other)=delete
ROOT::Experimental::RNTupleDescriptor::GetTopLevelFields
RFieldDescriptorRange GetTopLevelFields() const
Definition: RNTupleDescriptor.hxx:428
ROOT::Experimental::RClusterDescriptor::RPageRange::operator==
bool operator==(const RPageRange &other) const
Definition: RNTupleDescriptor.hxx:225
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::begin
RIterator begin()
Definition: RNTupleDescriptor.hxx:367
ROOT::Experimental::RNTupleDescriptorBuilder::AddFieldLink
void AddFieldLink(DescriptorId_t fieldId, DescriptorId_t linkId)
Definition: RNTupleDescriptor.cxx:908
ROOT::Experimental::RFieldDescriptor::fLinkIds
std::vector< DescriptorId_t > fLinkIds
The pointers in the other direction from parent to children.
Definition: RNTupleDescriptor.hxx:80
ROOT::Experimental::RFieldDescriptor::fParentId
DescriptorId_t fParentId
Establishes sub field relationships, such as classes and collections.
Definition: RNTupleDescriptor.hxx:77
ROOT::Experimental::RFieldDescriptor::operator==
bool operator==(const RFieldDescriptor &other) const
Definition: RNTupleDescriptor.cxx:474
ROOT::Experimental::RNTupleDescriptor::GetAuthor
std::string GetAuthor() const
Definition: RNTupleDescriptor.hxx:439
ROOT::Experimental::RFieldDescriptor::operator=
RFieldDescriptor & operator=(const RFieldDescriptor &other)=delete
ROOT::Experimental::RClusterDescriptor::RPageRange::RPageRange
RPageRange()=default
ROOT::Experimental::RNTupleDescriptorBuilder::fDescriptor
RNTupleDescriptor fDescriptor
Definition: RNTupleDescriptor.hxx:482
ROOT::Experimental::RNTupleDescriptor::FindPrevClusterId
DescriptorId_t FindPrevClusterId(DescriptorId_t clusterId) const
Definition: RNTupleDescriptor.cxx:720
ROOT::Experimental::RClusterDescriptor::GetLocator
RLocator GetLocator() const
Definition: RNTupleDescriptor.hxx:260
ROOT::Experimental::DescriptorId_t
std::uint64_t DescriptorId_t
Distriniguishes elements of the same type within a descriptor, e.g. different fields.
Definition: RNTupleUtil.hxx:90
ROOT::Experimental::RColumnDescriptor::fModel
RColumnModel fModel
Contains the column type and whether it is sorted.
Definition: RNTupleDescriptor.hxx:123
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::iterator_category
std::forward_iterator_tag iterator_category
Definition: RNTupleDescriptor.hxx:340
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::operator*
reference operator*()
Definition: RNTupleDescriptor.hxx:350
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange
Used to loop over a field's child fields.
Definition: RNTupleDescriptor.hxx:324
ROOT::Experimental::RNTupleDescriptor::operator==
bool operator==(const RNTupleDescriptor &other) const
Definition: RNTupleDescriptor.cxx:517
output
static void output(int code)
Definition: gifencode.c:226
string_view
basic_string_view< char > string_view
Definition: libcpp_string_view.h:785
ROOT::Experimental::RFieldDescriptor::GetId
DescriptorId_t GetId() const
Definition: RNTupleDescriptor.hxx:95
ROOT::Experimental::RNTupleDescriptor::fFieldDescriptors
std::unordered_map< DescriptorId_t, RFieldDescriptor > fFieldDescriptors
Definition: RNTupleDescriptor.hxx:310
ROOT::Experimental::RFieldDescriptor::GetLinkIds
const std::vector< DescriptorId_t > & GetLinkIds() const
Definition: RNTupleDescriptor.hxx:104
ROOT::Experimental::RClusterDescriptor::RColumnRange::fNElements
ClusterSize_t fNElements
A 32bit value for the number of column elements in the cluster.
Definition: RNTupleDescriptor.hxx:183
ROOT::Experimental::RFieldDescriptor::fFieldName
std::string fFieldName
The leaf name, not including parent fields.
Definition: RNTupleDescriptor.hxx:67
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::iterator
RIterator iterator
Definition: RNTupleDescriptor.hxx:341
ROOT::Experimental::RNTupleDescriptorBuilder
A helper class for piece-wise construction of an RNTupleDescriptor.
Definition: RNTupleDescriptor.hxx:480
ROOT::Experimental::RClusterDescriptor::fPageRanges
std::unordered_map< DescriptorId_t, RPageRange > fPageRanges
Definition: RNTupleDescriptor.hxx:241
ROOT::Experimental::RNTupleDescriptor::GetNEntries
NTupleSize_t GetNEntries() const
Definition: RNTupleDescriptor.cxx:629
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::difference_type
std::ptrdiff_t difference_type
Definition: RNTupleDescriptor.hxx:343
ROOT::Experimental::RClusterDescriptor::RLocator::fPosition
std::int64_t fPosition
Definition: RNTupleDescriptor.hxx:168
ROOT::Experimental::RClusterDescriptor::RColumnRange::fColumnId
DescriptorId_t fColumnId
Definition: RNTupleDescriptor.hxx:179
ROOT::Experimental::RNTupleDescriptor::fDescription
std::string fDescription
Free text from the user.
Definition: RNTupleDescriptor.hxx:293
ROOT::Experimental::RNTupleDescriptorBuilder::AddCluster
void AddCluster(DescriptorId_t clusterId, RNTupleVersion version, NTupleSize_t firstEntryIndex, ClusterSize_t nEntries)
Definition: RNTupleDescriptor.cxx:928
ROOT::Experimental::RColumnDescriptor::operator==
bool operator==(const RColumnDescriptor &other) const
Definition: RNTupleDescriptor.cxx:491
ROOT::Experimental::NTupleSize_t
std::uint64_t NTupleSize_t
Integer type long enough to hold the maximum number of entries in a column.
Definition: RNTupleUtil.hxx:54
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::RIterator
RIterator(const RNTupleDescriptor &ntuple, const std::vector< DescriptorId_t > &fieldChildren, std::size_t index)
Definition: RNTupleDescriptor.hxx:347
ROOT::Experimental::RClusterDescriptor::RColumnRange::fFirstElementIndex
NTupleSize_t fFirstElementIndex
A 64bit element index.
Definition: RNTupleDescriptor.hxx:181
ROOT::Experimental::ENTupleStructure
ENTupleStructure
The fields in the ntuple model tree can carry different structural information about the type system.
Definition: RNTupleUtil.hxx:44
ROOT::Experimental::RNTupleDescriptor::GetNColumns
std::size_t GetNColumns() const
Definition: RNTupleDescriptor.hxx:448
ROOT::Experimental::RFieldDescriptor::RNTupleDescriptorBuilder
friend class RNTupleDescriptorBuilder
Definition: RNTupleDescriptor.hxx:58
ROOT::Experimental::RClusterDescriptor
Meta-data for a set of ntuple clusters.
Definition: RNTupleDescriptor.hxx:160
ROOT::Experimental::RClusterDescriptor::RLocator::fBytesOnStorage
std::uint32_t fBytesOnStorage
Definition: RNTupleDescriptor.hxx:169
ROOT::Experimental::RColumnDescriptor::fIndex
std::uint32_t fIndex
A field can be serialized into several columns, which are numbered from zero to $n$.
Definition: RNTupleDescriptor.hxx:127
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::end
RIterator end()
Definition: RNTupleDescriptor.hxx:370
ROOT::Experimental::RFieldDescriptor::fNRepetitions
std::uint64_t fNRepetitions
The number of elements per entry for fixed-size arrays.
Definition: RNTupleDescriptor.hxx:73
ROOT::Experimental::RNTupleDescriptorBuilder::AddField
void AddField(DescriptorId_t fieldId, const RNTupleVersion &fieldVersion, const RNTupleVersion &typeVersion, std::string_view fieldName, std::string_view typeName, std::uint64_t nRepetitions, ENTupleStructure structure)
Definition: RNTupleDescriptor.cxx:893
ROOT::Experimental::RNTupleDescriptor::GenerateModel
std::unique_ptr< RNTupleModel > GenerateModel() const
Re-create the C++ model from the stored meta-data.
Definition: RNTupleDescriptor.cxx:732
ROOT::Experimental::RColumnDescriptor::fColumnId
DescriptorId_t fColumnId
Definition: RNTupleDescriptor.hxx:119
ROOT::Experimental::RNTupleUuid
std::string RNTupleUuid
Every NTuple is identified by a UUID. TODO(jblomer): should this be a TUUID?
Definition: RNTupleUtil.hxx:119
ROOT::Experimental::RNTupleDescriptor::fGroupUuid
RNTupleUuid fGroupUuid
Column sets that are created as derived sets from existing NTuples share the same group id.
Definition: RNTupleDescriptor.hxx:308
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::fNTuple
const RNTupleDescriptor & fNTuple
The enclosing range's NTuple.
Definition: RNTupleDescriptor.hxx:335
ROOT::Experimental::RColumnDescriptor::GetId
DescriptorId_t GetId() const
Definition: RNTupleDescriptor.hxx:142
ROOT::Experimental::RFieldDescriptor::kFrameVersionMin
static constexpr std::uint16_t kFrameVersionMin
Definition: RNTupleDescriptor.hxx:85
ROOT::Experimental::RClusterDescriptor::RPageRange::RPageInfo::fLocator
RLocator fLocator
The meaning of fLocator depends on the storage backend.
Definition: RNTupleDescriptor.hxx:209
ROOT::Experimental::RColumnDescriptor::fVersion
RNTupleVersion fVersion
Versions can change, e.g., when new column types are added.
Definition: RNTupleDescriptor.hxx:121
ROOT::Experimental::RNTupleDescriptor::FindColumnId
DescriptorId_t FindColumnId(DescriptorId_t fieldId, std::uint32_t columnIndex) const
Definition: RNTupleDescriptor.cxx:682
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::fFieldChildren
const std::vector< DescriptorId_t > & fFieldChildren
The enclosing range's descriptor id list.
Definition: RNTupleDescriptor.hxx:337
ROOT::Experimental::RNTupleDescriptor
The on-storage meta-data of an ntuple.
Definition: RNTupleDescriptor.hxx:286
ROOT::Experimental::RFieldDescriptor::RFieldDescriptor
RFieldDescriptor()=default
ROOT::Experimental::RNTupleVersion
For forward and backward compatibility, attach version information to the consitituents of the file f...
Definition: RNTupleUtil.hxx:126
ROOT::Experimental::RNTupleDescriptor::SerializeFooter
std::uint32_t SerializeFooter(void *buffer) const
Serializes cluster meta data. Returns the number of bytes and fills buffer if it is not nullptr.
Definition: RNTupleDescriptor.cxx:569
ROOT::Experimental::RNTupleDescriptor::RNTupleDescriptor
RNTupleDescriptor()=default
ROOT::Experimental::RClusterDescriptor::fFirstEntryIndex
NTupleSize_t fFirstEntryIndex
Clusters can be swapped by adjusting the entry offsets.
Definition: RNTupleDescriptor.hxx:235
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::fIndex
std::size_t fIndex
Definition: RNTupleDescriptor.hxx:338
ROOT::Experimental::RNTupleDescriptor::fTimeStampWritten
std::chrono::system_clock::time_point fTimeStampWritten
The time stamp of writing the data to storage, which gets updated when re-written.
Definition: RNTupleDescriptor.hxx:301
ROOT::Experimental::RColumnDescriptor::GetModel
RColumnModel GetModel() const
Definition: RNTupleDescriptor.hxx:144
ROOT::Experimental::RNTupleDescriptor::fColumnDescriptors
std::unordered_map< DescriptorId_t, RColumnDescriptor > fColumnDescriptors
Definition: RNTupleDescriptor.hxx:311
ROOT::Experimental::RClusterDescriptor::GetPageRange
const RPageRange & GetPageRange(DescriptorId_t columnId) const
Definition: RNTupleDescriptor.hxx:262
ROOT::Experimental::kInvalidClusterIndex
constexpr ClusterSize_t kInvalidClusterIndex(std::uint32_t(-1))
ROOT::Experimental::RColumnDescriptor::GetFieldId
DescriptorId_t GetFieldId() const
Definition: RNTupleDescriptor.hxx:146
ROOT::Experimental::RClusterDescriptor::fColumnRanges
std::unordered_map< DescriptorId_t, RColumnRange > fColumnRanges
Definition: RNTupleDescriptor.hxx:240
ROOT::Experimental::RColumnDescriptor::RColumnDescriptor
RColumnDescriptor()=default
ROOT::Experimental::RClusterDescriptor::GetNEntries
ClusterSize_t GetNEntries() const
Definition: RNTupleDescriptor.hxx:259
ROOT::Experimental::RColumnDescriptor
Meta-data stored for every column of an ntuple.
Definition: RNTupleDescriptor.hxx:115
ROOT::Experimental::RClusterDescriptor::RLocator::fUrl
std::string fUrl
Definition: RNTupleDescriptor.hxx:170
ROOT::Experimental::RNTupleDescriptor::GetColumnDescriptor
const RColumnDescriptor & GetColumnDescriptor(DescriptorId_t columnId) const
Definition: RNTupleDescriptor.hxx:405
ROOT::Experimental::RFieldDescriptor::GetFieldVersion
RNTupleVersion GetFieldVersion() const
Definition: RNTupleDescriptor.hxx:96
ROOT::Experimental::RFieldDescriptor::fStructure
ENTupleStructure fStructure
The structural information carried by this field in the data model tree.
Definition: RNTupleDescriptor.hxx:75
ROOT::Experimental::RColumnDescriptor::fFieldId
DescriptorId_t fFieldId
Every column belongs to one and only one field.
Definition: RNTupleDescriptor.hxx:125
ROOT::Experimental::RNTupleDescriptorBuilder::AddClusterColumnRange
void AddClusterColumnRange(DescriptorId_t clusterId, const RClusterDescriptor::RColumnRange &columnRange)
Definition: RNTupleDescriptor.cxx:945
ROOT::Experimental::RColumnDescriptor::operator=
RColumnDescriptor & operator=(const RColumnDescriptor &other)=delete
ROOT::Experimental::RClusterDescriptor::fVersion
RNTupleVersion fVersion
Future versions of the cluster descriptor might add more meta-data, e.g. a semantic checksum.
Definition: RNTupleDescriptor.hxx:233
ROOT::Experimental::RNTupleDescriptorBuilder::AddClustersFromFooter
void AddClustersFromFooter(void *footerBuffer)
Definition: RNTupleDescriptor.cxx:822
RColumnModel.hxx
ROOT::Experimental::RColumnDescriptor::kFrameVersionMin
static constexpr std::uint16_t kFrameVersionMin
Definition: RNTupleDescriptor.hxx:132
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::fFieldChildren
std::vector< DescriptorId_t > fFieldChildren
The descriptor ids of the child fields.
Definition: RNTupleDescriptor.hxx:330
RStringView.hxx
ROOT::Experimental::kInvalidNTupleIndex
constexpr NTupleSize_t kInvalidNTupleIndex
Definition: RNTupleUtil.hxx:55
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::operator++
iterator operator++()
Definition: RNTupleDescriptor.hxx:349
ROOT::Experimental::RNTupleDescriptor::FindFieldId
DescriptorId_t FindFieldId(std::string_view fieldName, DescriptorId_t parentId) const
Definition: RNTupleDescriptor.cxx:650
ROOT::Experimental::RFieldDescriptor::fTypeName
std::string fTypeName
The C++ type that was used when writing the field.
Definition: RNTupleDescriptor.hxx:71
ROOT::Experimental::RClusterDescriptor::GetVersion
RNTupleVersion GetVersion() const
Definition: RNTupleDescriptor.hxx:257
ROOT::Experimental::RNTupleDescriptor::PrintInfo
void PrintInfo(std::ostream &output) const
Definition: RNTupleDescriptorFmt.cxx:98
ROOT::R::function
void function(const Char_t *name_, T fun, const Char_t *docstring=0)
Definition: RExports.h:151
ROOT::Experimental::RClusterDescriptor::fNEntries
ClusterSize_t fNEntries
Definition: RNTupleDescriptor.hxx:236
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::fNTuple
const RNTupleDescriptor & fNTuple
The associated NTuple for this range.
Definition: RNTupleDescriptor.hxx:327
ROOT::Experimental::RNTupleDescriptor::GetTimeStampData
std::chrono::system_clock::time_point GetTimeStampData() const
Definition: RNTupleDescriptor.hxx:441
ROOT::Experimental::RColumnDescriptor::GetIndex
std::uint32_t GetIndex() const
Definition: RNTupleDescriptor.hxx:145
ROOT::Experimental::RClusterDescriptor::RColumnRange::fCompressionSettings
std::int64_t fCompressionSettings
The usual format for ROOT compression settings (see Compression.h).
Definition: RNTupleDescriptor.hxx:186
ROOT::Experimental::RNTupleDescriptorBuilder::MoveDescriptor
RNTupleDescriptor MoveDescriptor()
Definition: RNTupleDescriptor.cxx:746
ROOT::Experimental::RFieldDescriptor::GetFieldName
std::string GetFieldName() const
Definition: RNTupleDescriptor.hxx:98
ROOT::Experimental::RNTupleDescriptor::FindNextClusterId
DescriptorId_t FindNextClusterId(DescriptorId_t clusterId) const
Definition: RNTupleDescriptor.cxx:706
ROOT::Experimental::RNTupleDescriptor::GetOwnUuid
RNTupleUuid GetOwnUuid() const
Definition: RNTupleDescriptor.hxx:444
ROOT::Experimental::RColumnModel
Holds the static meta-data of a column in a tree.
Definition: RColumnModel.hxx:72
ROOT::Experimental::RNTupleDescriptor::LocateMetadata
static void LocateMetadata(const void *postscript, std::uint32_t &szHeader, std::uint32_t &szFooter)
Given kNBytesPostscript bytes, extract the header and footer lengths in bytes.
Definition: RNTupleDescriptor.cxx:617
RNTupleUtil.hxx
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator
Definition: RNTupleDescriptor.hxx:332
ROOT::Experimental::RClusterDescriptor::RPageRange::RPageInfo::fNElements
ClusterSize_t fNElements
The sum of the elements of all the pages must match the corresponding fNElements field in fColumnRang...
Definition: RNTupleDescriptor.hxx:207
ROOT::Experimental::RClusterSize
Wrap the 32bit integer in a struct in order to avoid template specialization clash with std::uint32_t...
Definition: RNTupleUtil.hxx:57
ROOT::Experimental::RFieldDescriptor::fFieldVersion
RNTupleVersion fFieldVersion
The version of the C++-type-to-column translation mechanics.
Definition: RNTupleDescriptor.hxx:63
ROOT::Experimental::RNTupleDescriptor::kNBytesPreamble
static constexpr unsigned int kNBytesPreamble
The preamble is sufficient to get the length of the header.
Definition: RNTupleDescriptor.hxx:379
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RFieldDescriptorRange
RFieldDescriptorRange(const RNTupleDescriptor &ntuple, const RFieldDescriptor &field)
Definition: RNTupleDescriptor.hxx:358
ROOT::Experimental::RNTupleDescriptor::GetNClusters
std::size_t GetNClusters() const
Definition: RNTupleDescriptor.hxx:449
ROOT::Experimental::RFieldDescriptor::GetNRepetitions
std::uint64_t GetNRepetitions() const
Definition: RNTupleDescriptor.hxx:101
ROOT::Experimental::RNTupleDescriptor::GetName
std::string GetName() const
Definition: RNTupleDescriptor.hxx:437
ROOT::Experimental::RNTupleDescriptorBuilder::SetNTuple
void SetNTuple(const std::string_view name, const std::string_view description, const std::string_view author, const RNTupleVersion &version, const RNTupleUuid &uuid)
Definition: RNTupleDescriptor.cxx:881
ROOT::Experimental::RNTupleDescriptor::operator=
RNTupleDescriptor & operator=(const RNTupleDescriptor &other)=delete
ROOT::Experimental::RNTupleDescriptor::fCustodian
std::string fCustodian
The current responsible for storing the data.
Definition: RNTupleDescriptor.hxx:297
ROOT::Experimental::RNTupleDescriptor::kFrameVersionMin
static constexpr std::uint16_t kFrameVersionMin
Definition: RNTupleDescriptor.hxx:377
ROOT::Experimental::RClusterDescriptor::kFrameVersionMin
static constexpr std::uint16_t kFrameVersionMin
Definition: RNTupleDescriptor.hxx:246
ROOT::Experimental::RFieldDescriptor::fFieldId
DescriptorId_t fFieldId
Definition: RNTupleDescriptor.hxx:61
ROOT::Experimental::RClusterDescriptor::kFrameVersionCurrent
static constexpr std::uint16_t kFrameVersionCurrent
In order to handle changes to the serialization routine in future ntuple versions.
Definition: RNTupleDescriptor.hxx:245
ROOT::Experimental::RNTupleDescriptor::fClusterDescriptors
std::unordered_map< DescriptorId_t, RClusterDescriptor > fClusterDescriptors
May contain only a subset of all the available clusters, e.g.
Definition: RNTupleDescriptor.hxx:314
ROOT::Experimental::RFieldDescriptor
Meta-data stored for every field of an ntuple.
Definition: RNTupleDescriptor.hxx:57
ROOT::Experimental::RFieldDescriptor::GetParentId
DescriptorId_t GetParentId() const
Definition: RNTupleDescriptor.hxx:103
ROOT::Experimental::RNTupleDescriptor::GetVersion
RNTupleVersion GetVersion() const
Definition: RNTupleDescriptor.hxx:443
ROOT::Experimental::RNTupleDescriptor::SerializeHeader
std::uint32_t SerializeHeader(void *buffer) const
We deliberately do not use ROOT's built-in serialization in order to allow for use of RNTuple's witho...
Definition: RNTupleDescriptor.cxx:533
ROOT::Experimental::RClusterDescriptor::RLocator::operator==
bool operator==(const RLocator &other) const
Definition: RNTupleDescriptor.hxx:172
ROOT::Experimental::RClusterDescriptor::RLocator
Generic information about the physical location of data.
Definition: RNTupleDescriptor.hxx:167
ROOT::Experimental::RColumnDescriptor::kFrameVersionCurrent
static constexpr std::uint16_t kFrameVersionCurrent
In order to handle changes to the serialization routine in future ntuple versions.
Definition: RNTupleDescriptor.hxx:131
ROOT::Experimental::RClusterDescriptor::RColumnRange::Contains
bool Contains(NTupleSize_t index) const
Definition: RNTupleDescriptor.hxx:196
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::operator==
bool operator==(const iterator &rh) const
Definition: RNTupleDescriptor.hxx:356
ROOT::Experimental::RNTupleDescriptor::GetFieldRange
RFieldDescriptorRange GetFieldRange(const RFieldDescriptor &fieldDesc) const
Definition: RNTupleDescriptor.hxx:412
ROOT::Experimental::RNTupleDescriptor::fVersion
RNTupleVersion fVersion
The version evolves with the ntuple summary meta-data.
Definition: RNTupleDescriptor.hxx:303
name
char name[80]
Definition: TGX11.cxx:110
ROOT::Experimental::RFieldDescriptor::fFieldDescription
std::string fFieldDescription
Free text set by the user.
Definition: RNTupleDescriptor.hxx:69
ROOT::Experimental::RNTupleDescriptorBuilder::SetClusterLocator
void SetClusterLocator(DescriptorId_t clusterId, RClusterDescriptor::RLocator locator)
Definition: RNTupleDescriptor.cxx:939
ROOT::Experimental::RNTupleDescriptorBuilder::AddClusterPageRange
void AddClusterPageRange(DescriptorId_t clusterId, RClusterDescriptor::RPageRange &&pageRange)
Definition: RNTupleDescriptor.cxx:951
ROOT::Experimental::RClusterDescriptor::operator==
bool operator==(const RClusterDescriptor &other) const
Definition: RNTupleDescriptor.cxx:503
ROOT::Experimental::RFieldDescriptor::GetStructure
ENTupleStructure GetStructure() const
Definition: RNTupleDescriptor.hxx:102
ROOT::Experimental::RNTupleDescriptorBuilder::GetDescriptor
const RNTupleDescriptor & GetDescriptor() const
Definition: RNTupleDescriptor.hxx:486
ROOT::Experimental::RNTupleDescriptor::GetGroupUuid
RNTupleUuid GetGroupUuid() const
Definition: RNTupleDescriptor.hxx:445
make_cnn_model.model
model
Definition: make_cnn_model.py:6
ROOT::Experimental::RFieldDescriptor::GetFieldDescription
std::string GetFieldDescription() const
Definition: RNTupleDescriptor.hxx:99
ROOT::Experimental::kInvalidDescriptorId
constexpr DescriptorId_t kInvalidDescriptorId
Definition: RNTupleUtil.hxx:91
ROOT::Experimental::RColumnDescriptor::GetVersion
RNTupleVersion GetVersion() const
Definition: RNTupleDescriptor.hxx:143
ROOT::Experimental::RNTupleDescriptorBuilder::AddColumn
void AddColumn(DescriptorId_t columnId, DescriptorId_t fieldId, const RNTupleVersion &version, const RColumnModel &model, std::uint32_t index)
Definition: RNTupleDescriptor.cxx:915
ROOT::Experimental::RFieldDescriptor::kFrameVersionCurrent
static constexpr std::uint16_t kFrameVersionCurrent
In order to handle changes to the serialization routine in future ntuple versions.
Definition: RNTupleDescriptor.hxx:84
ROOT::Experimental::RClusterDescriptor::fClusterId
DescriptorId_t fClusterId
Definition: RNTupleDescriptor.hxx:231
ROOT::Experimental::RNTupleDescriptorBuilder::IsValid
bool IsValid() const
Definition: RNTupleDescriptor.hxx:485
ROOT::Experimental::RClusterDescriptor::RPageRange::operator=
RPageRange & operator=(const RPageRange &other)=delete
ROOT::Experimental::RClusterDescriptor::RColumnRange::operator==
bool operator==(const RColumnRange &other) const
Definition: RNTupleDescriptor.hxx:191
ROOT::Experimental::RNTupleDescriptor::GetNElements
NTupleSize_t GetNElements(DescriptorId_t columnId) const
Definition: RNTupleDescriptor.cxx:638
ROOT::Experimental::RFieldDescriptor::fTypeVersion
RNTupleVersion fTypeVersion
The version of the C++ type itself.
Definition: RNTupleDescriptor.hxx:65
ROOT::Experimental::RNTupleDescriptorBuilder::SetFromHeader
void SetFromHeader(void *headerBuffer)
Definition: RNTupleDescriptor.cxx:753
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::value_type
RFieldDescriptor value_type
Definition: RNTupleDescriptor.hxx:342
ROOT::Experimental::RClusterDescriptor::RPageRange::fColumnId
DescriptorId_t fColumnId
Definition: RNTupleDescriptor.hxx:222
ROOT::Experimental::RNTupleDescriptor::GetClusterDescriptor
const RClusterDescriptor & GetClusterDescriptor(DescriptorId_t clusterId) const
Definition: RNTupleDescriptor.hxx:408
ROOT::Experimental::RClusterDescriptor::RPageRange::RPageInfo::operator==
bool operator==(const RPageInfo &other) const
Definition: RNTupleDescriptor.hxx:211
ROOT::Experimental::RClusterDescriptor::RPageRange
Records the parition of data into pages for a particular column in a particular cluster.
Definition: RNTupleDescriptor.hxx:202
ROOT::Experimental::RNTupleDescriptor::kFrameVersionCurrent
static constexpr std::uint16_t kFrameVersionCurrent
In order to handle changes to the serialization routine in future ntuple versions.
Definition: RNTupleDescriptor.hxx:376
ROOT::Experimental::RNTupleDescriptor::GetCustodian
std::string GetCustodian() const
Definition: RNTupleDescriptor.hxx:440
ROOT::Experimental::RNTupleDescriptor::FindClusterId
DescriptorId_t FindClusterId(DescriptorId_t columnId, NTupleSize_t index) const
Definition: RNTupleDescriptor.cxx:693
ROOT::Experimental::RFieldDescriptor::GetTypeName
std::string GetTypeName() const
Definition: RNTupleDescriptor.hxx:100
ROOT::Experimental::RNTupleDescriptor::fTimeStampData
std::chrono::system_clock::time_point fTimeStampData
The time stamp of the ntuple data (immutable)
Definition: RNTupleDescriptor.hxx:299
ROOT::Experimental::RNTupleDescriptor::GetDescription
std::string GetDescription() const
Definition: RNTupleDescriptor.hxx:438
ROOT
VSD Structures.
Definition: StringConv.hxx:21
ROOT::Experimental::RClusterDescriptor::GetId
DescriptorId_t GetId() const
Definition: RNTupleDescriptor.hxx:256
ROOT::Experimental::RNTupleDescriptor::RFieldDescriptorRange::RIterator::operator!=
bool operator!=(const iterator &rh) const
Definition: RNTupleDescriptor.hxx:355
ROOT::Experimental::RNTupleDescriptor::GetFieldDescriptor
const RFieldDescriptor & GetFieldDescriptor(DescriptorId_t fieldId) const
Definition: RNTupleDescriptor.hxx:402
ROOT::Experimental::RNTupleDescriptor::GetFieldZeroId
DescriptorId_t GetFieldZeroId() const
Returns the logical parent of all top-level NTuple data fields.
Definition: RNTupleDescriptor.cxx:668
ROOT::Experimental::RNTupleDescriptor::kNBytesPostscript
static constexpr unsigned int kNBytesPostscript
The last few bytes after the footer store the length of footer and header.
Definition: RNTupleDescriptor.hxx:381
ROOT::Experimental::RClusterDescriptor::GetFirstEntryIndex
NTupleSize_t GetFirstEntryIndex() const
Definition: RNTupleDescriptor.hxx:258