Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
RNTupleSerialize.hxx
Go to the documentation of this file.
1/// \file ROOT/RNTupleSerialize.hxx
2/// \ingroup NTuple
3/// \author Jakob Blomer <jblomer@cern.ch>
4/// \author Javier Lopez-Gomez <javier.lopez.gomez@cern.ch>
5/// \date 2021-08-02
6
7/*************************************************************************
8 * Copyright (C) 1995-2021, Rene Brun and Fons Rademakers. *
9 * All rights reserved. *
10 * *
11 * For the licensing terms see $ROOTSYS/LICENSE. *
12 * For the list of contributors see $ROOTSYS/README/CREDITS. *
13 *************************************************************************/
14
15#ifndef ROOT_RNTupleSerialize
16#define ROOT_RNTupleSerialize
17
18#include <ROOT/RError.hxx>
19#include <ROOT/RNTupleTypes.hxx>
20#include <ROOT/RSpan.hxx>
21
22#include <Rtypes.h>
23
24#include <cstdint>
25#include <limits>
26#include <map>
27#include <string>
28#include <unordered_map>
29#include <vector>
30
32
33namespace ROOT {
34
35class RNTupleDescriptor;
36class RClusterDescriptor;
37enum class EExtraTypeInfoIds;
38
39namespace Experimental {
40class RNTupleAttrSetDescriptor;
41namespace Internal {
42class RNTupleAttrSetDescriptorBuilder;
43} // namespace Internal
44} // namespace Experimental
45
46namespace Internal {
47
48class RClusterDescriptorBuilder;
49class RNTupleDescriptorBuilder;
50
51// clang-format off
52/**
53\class ROOT::Internal::RNTupleSerializer
54\ingroup NTuple
55\brief A helper class for serializing and deserialization of the RNTuple binary format
56
57All serialization and deserialization routines return the number of bytes processed (written or read).
58
59The serialization routines can be called with a nullptr buffer, in which case only the size required to perform
60a serialization is returned. Deserialization routines must be called with a buffer that is sufficiently large.
61
62Deserialization errors throw exceptions. Only when indicated or when passed as a parameter is the buffer size checked.
63*/
64// clang-format on
67 DeserializePageListRaw(const void *buffer, std::uint64_t bufSize, ROOT::DescriptorId_t clusterGroupId,
68 const RNTupleDescriptor &desc);
69
70public:
71 static constexpr std::uint16_t kEnvelopeTypeHeader = 0x01;
72 static constexpr std::uint16_t kEnvelopeTypeFooter = 0x02;
73 static constexpr std::uint16_t kEnvelopeTypePageList = 0x03;
74
75 static constexpr std::uint16_t kFlagRepetitiveField = 0x01;
76 static constexpr std::uint16_t kFlagProjectedField = 0x02;
77 static constexpr std::uint16_t kFlagHasTypeChecksum = 0x04;
78 static constexpr std::uint16_t kFlagIsSoACollection = 0x08;
79
80 static constexpr std::uint16_t kFlagDeferredColumn = 0x01;
81 static constexpr std::uint16_t kFlagHasValueRange = 0x02;
82
83 static constexpr ROOT::DescriptorId_t kZeroFieldId = std::uint64_t(-2);
84
85 static constexpr int64_t kSuppressedColumnMarker = std::numeric_limits<std::int64_t>::min();
86
87 // In the page sink and the streamer field, the seen streamer infos are stored in a map
88 // with the unique streamer info number being the key. Sorted by unique number.
89 using StreamerInfoMap_t = std::map<Int_t, TVirtualStreamerInfo *>;
90
92 std::uint64_t fLength = 0;
94 };
95
97 std::uint64_t fFirstEntry = 0;
98 std::uint64_t fNEntries = 0;
99 std::uint8_t fFlags = 0;
100 };
101
103 std::uint64_t fMinEntry = 0;
104 std::uint64_t fEntrySpan = 0;
105 std::uint32_t fNClusters = 0;
107 };
108
109 /// The serialization context is used for the piecewise serialization of a descriptor. During header serialization,
110 /// the mapping of in-memory field and column IDs to on-disk IDs is built so that it can be used for the
111 /// footer serialization in a second step.
112 class RContext {
113 private:
114 std::uint64_t fHeaderSize = 0;
115 std::uint64_t fHeaderXxHash3 = 0;
116 std::map<ROOT::DescriptorId_t, ROOT::DescriptorId_t> fMem2OnDiskFieldIDs;
117 std::map<ROOT::DescriptorId_t, ROOT::DescriptorId_t> fMem2OnDiskColumnIDs;
118 std::map<ROOT::DescriptorId_t, ROOT::DescriptorId_t> fMem2OnDiskClusterIDs;
119 std::map<ROOT::DescriptorId_t, ROOT::DescriptorId_t> fMem2OnDiskClusterGroupIDs;
120 std::vector<ROOT::DescriptorId_t> fOnDisk2MemFieldIDs;
121 std::vector<ROOT::DescriptorId_t> fOnDisk2MemColumnIDs;
122 std::vector<ROOT::DescriptorId_t> fOnDisk2MemClusterIDs;
123 std::vector<ROOT::DescriptorId_t> fOnDisk2MemClusterGroupIDs;
124
125 public:
126 void SetHeaderSize(std::uint64_t size) { fHeaderSize = size; }
127 std::uint64_t GetHeaderSize() const { return fHeaderSize; }
129 std::uint64_t GetHeaderXxHash3() const { return fHeaderXxHash3; }
130 /// Map an in-memory field ID to its on-disk counterpart. It is allowed to call this function multiple times for
131 /// the same `memId`, in which case the return value is the on-disk ID assigned on the first call.
133 {
134 auto onDiskId = fOnDisk2MemFieldIDs.size();
135 const auto &p = fMem2OnDiskFieldIDs.try_emplace(memId, onDiskId);
136 if (p.second)
137 fOnDisk2MemFieldIDs.push_back(memId);
138 return (*p.first).second;
139 }
140 /// Map an in-memory column ID to its on-disk counterpart. It is allowed to call this function multiple times for
141 /// the same `memId`, in which case the return value is the on-disk ID assigned on the first call.
142 /// Note that we only map physical column IDs. Logical column IDs of alias columns are shifted before the
143 /// serialization of the extension header. Also, we only need to query physical column IDs for the page list
144 /// serialization.
146 {
147 auto onDiskId = fOnDisk2MemColumnIDs.size();
148 const auto &p = fMem2OnDiskColumnIDs.try_emplace(memId, onDiskId);
149 if (p.second)
150 fOnDisk2MemColumnIDs.push_back(memId);
151 return (*p.first).second;
152 }
167 /// Map in-memory field and column IDs to their on-disk counterparts. This function is unconditionally called
168 /// during header serialization. This function must be manually called after an incremental schema update as page
169 /// list serialization requires all columns to be mapped.
170 void MapSchema(const RNTupleDescriptor &desc, bool forHeaderExtension);
171
198
199 /// Return a vector containing the in-memory field ID for each on-disk counterpart, in order, i.e. the `i`-th
200 /// value corresponds to the in-memory field ID for `i`-th on-disk ID
201 const std::vector<ROOT::DescriptorId_t> &GetOnDiskFieldList() const { return fOnDisk2MemFieldIDs; }
202 };
203
204 /// Writes a XxHash-3 64bit checksum of the byte range given by data and length.
205 static std::uint32_t
206 SerializeXxHash3(const unsigned char *data, std::uint64_t length, std::uint64_t &xxhash3, void *buffer);
207 /// Expects an xxhash3 checksum in the 8 bytes following data + length and verifies it.
208 static RResult<void> VerifyXxHash3(const unsigned char *data, std::uint64_t length, std::uint64_t &xxhash3);
209 static RResult<void> VerifyXxHash3(const unsigned char *data, std::uint64_t length);
210
211 static std::uint32_t SerializeInt16(std::int16_t val, void *buffer);
212 static std::uint32_t DeserializeInt16(const void *buffer, std::int16_t &val);
213 static std::uint32_t SerializeUInt16(std::uint16_t val, void *buffer);
214 static std::uint32_t DeserializeUInt16(const void *buffer, std::uint16_t &val);
215
216 static std::uint32_t SerializeInt32(std::int32_t val, void *buffer);
217 static std::uint32_t DeserializeInt32(const void *buffer, std::int32_t &val);
218 static std::uint32_t SerializeUInt32(std::uint32_t val, void *buffer);
219 static std::uint32_t DeserializeUInt32(const void *buffer, std::uint32_t &val);
220
221 static std::uint32_t SerializeInt64(std::int64_t val, void *buffer);
222 static std::uint32_t DeserializeInt64(const void *buffer, std::int64_t &val);
223 static std::uint32_t SerializeUInt64(std::uint64_t val, void *buffer);
224 static std::uint32_t DeserializeUInt64(const void *buffer, std::uint64_t &val);
225
226 static std::uint32_t SerializeString(const std::string &val, void *buffer);
227 static RResult<std::uint32_t> DeserializeString(const void *buffer, std::uint64_t bufSize, std::string &val);
228
229 /// While we could just interpret the enums as ints, we make the translation explicit
230 /// in order to avoid accidentally changing the on-disk numbers when adjusting the enum classes.
234 static RResult<std::uint32_t> DeserializeFieldStructure(const void *buffer, ROOT::ENTupleStructure &structure);
237
238 static std::uint32_t SerializeEnvelopePreamble(std::uint16_t envelopeType, void *buffer);
239 static RResult<std::uint32_t> SerializeEnvelopePostscript(unsigned char *envelope, std::uint64_t size);
241 SerializeEnvelopePostscript(unsigned char *envelope, std::uint64_t size, std::uint64_t &xxhash3);
242 // The bufSize must include the 8 bytes for the final xxhash3 checksum.
244 DeserializeEnvelope(const void *buffer, std::uint64_t bufSize, std::uint16_t expectedType);
246 DeserializeEnvelope(const void *buffer, std::uint64_t bufSize, std::uint16_t expectedType, std::uint64_t &xxhash3);
247
248 static std::uint32_t SerializeRecordFramePreamble(void *buffer);
249 static std::uint32_t SerializeListFramePreamble(std::uint32_t nitems, void *buffer);
250 static RResult<std::uint32_t> SerializeFramePostscript(void *frame, std::uint64_t size);
252 DeserializeFrameHeader(const void *buffer, std::uint64_t bufSize, std::uint64_t &frameSize, std::uint32_t &nitems);
254 DeserializeFrameHeader(const void *buffer, std::uint64_t bufSize, std::uint64_t &frameSize);
255
256 // An empty flags vector will be serialized as a single, zero feature flag
257 // The most significant bit in every flag is reserved and must _not_ be set
258 static RResult<std::uint32_t> SerializeFeatureFlags(const std::vector<std::uint64_t> &flags, void *buffer);
260 DeserializeFeatureFlags(const void *buffer, std::uint64_t bufSize, std::vector<std::uint64_t> &flags);
261
263 static RResult<std::uint32_t> SerializeEnvelopeLink(const REnvelopeLink &envelopeLink, void *buffer);
264 static RResult<std::uint32_t> DeserializeLocator(const void *buffer, std::uint64_t bufSize, RNTupleLocator &locator);
266 DeserializeEnvelopeLink(const void *buffer, std::uint64_t bufSize, REnvelopeLink &envelopeLink);
267
268 static RResult<std::uint32_t> SerializeClusterSummary(const RClusterSummary &clusterSummary, void *buffer);
269 static RResult<std::uint32_t> SerializeClusterGroup(const RClusterGroup &clusterGroup, void *buffer);
271 DeserializeClusterSummary(const void *buffer, std::uint64_t bufSize, RClusterSummary &clusterSummary);
273 DeserializeClusterGroup(const void *buffer, std::uint64_t bufSize, RClusterGroup &clusterGroup);
274
275 /// Serialize the schema description in `desc` into `buffer`. If `forHeaderExtension` is true, serialize only the
276 /// fields and columns tagged as part of the header extension (see `RNTupleDescriptorBuilder::BeginHeaderExtension`).
278 const RContext &context, bool forHeaderExtension = false);
279 static RResult<std::uint32_t> DeserializeSchemaDescription(const void *buffer, std::uint64_t bufSize,
281
285 DeserializeAttributeSet(const void *buffer, std::uint64_t bufSize,
287
288 static RResult<RContext> SerializeHeader(void *buffer, const RNTupleDescriptor &desc);
289 static RResult<std::uint32_t> SerializePageList(void *buffer, const RNTupleDescriptor &desc,
290 std::span<ROOT::DescriptorId_t> physClusterIDs,
291 const RContext &context);
292 static RResult<std::uint32_t> SerializeFooter(void *buffer, const RNTupleDescriptor &desc, const RContext &context);
293
294 static RResult<void>
296 static RResult<void>
298
300 /// Deserializes the descriptor as-is without performing any additional fixup. The produced descriptor is
301 /// unsuitable for reading or writing, but it's a faithful representation of the on-disk information.
302 kRaw,
303 /// Deserializes the descriptor and performs fixup on the suppressed column ranges. This produces a descriptor
304 /// that is suitable for writing, but not reading.
306 /// Deserializes the descriptor and performs fixup on the suppressed column ranges and on clusters, taking
307 /// into account the header extension. This produces a descriptor that is suitable for reading.
309 };
310 // The clusters vector must be initialized with the cluster summaries corresponding to the page list
311 static RResult<void> DeserializePageList(const void *buffer, std::uint64_t bufSize,
314
315 // Helper functions to (de-)serialize the streamer info type extra information
316 static std::string SerializeStreamerInfos(const StreamerInfoMap_t &infos);
318}; // class RNTupleSerializer
319
320} // namespace Internal
321} // namespace ROOT
322
323#endif // ROOT_RNTupleSerialize
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
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 length
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 nitems
Option_t Option_t TPoint TPoint const char mode
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.
Metadata stored for every Attribute Set linked to an RNTuple.
A helper class for piece-wise construction of an RNTupleDescriptor.
The serialization context is used for the piecewise serialization of a descriptor.
ROOT::DescriptorId_t GetOnDiskClusterGroupId(ROOT::DescriptorId_t memId) const
std::map< ROOT::DescriptorId_t, ROOT::DescriptorId_t > fMem2OnDiskClusterIDs
ROOT::DescriptorId_t GetOnDiskFieldId(ROOT::DescriptorId_t memId) const
ROOT::DescriptorId_t GetMemColumnId(ROOT::DescriptorId_t onDiskId) const
ROOT::DescriptorId_t GetMemClusterGroupId(ROOT::DescriptorId_t onDiskId) const
std::vector< ROOT::DescriptorId_t > fOnDisk2MemColumnIDs
std::map< ROOT::DescriptorId_t, ROOT::DescriptorId_t > fMem2OnDiskColumnIDs
ROOT::DescriptorId_t GetOnDiskClusterId(ROOT::DescriptorId_t memId) const
std::map< ROOT::DescriptorId_t, ROOT::DescriptorId_t > fMem2OnDiskFieldIDs
std::map< ROOT::DescriptorId_t, ROOT::DescriptorId_t > fMem2OnDiskClusterGroupIDs
std::vector< ROOT::DescriptorId_t > fOnDisk2MemFieldIDs
ROOT::DescriptorId_t GetOnDiskColumnId(ROOT::DescriptorId_t memId) const
void MapSchema(const RNTupleDescriptor &desc, bool forHeaderExtension)
Map in-memory field and column IDs to their on-disk counterparts.
std::vector< ROOT::DescriptorId_t > fOnDisk2MemClusterGroupIDs
ROOT::DescriptorId_t MapClusterId(ROOT::DescriptorId_t memId)
std::vector< ROOT::DescriptorId_t > fOnDisk2MemClusterIDs
ROOT::DescriptorId_t MapPhysicalColumnId(ROOT::DescriptorId_t memId)
Map an in-memory column ID to its on-disk counterpart.
ROOT::DescriptorId_t GetMemClusterId(ROOT::DescriptorId_t onDiskId) const
const std::vector< ROOT::DescriptorId_t > & GetOnDiskFieldList() const
Return a vector containing the in-memory field ID for each on-disk counterpart, in order,...
ROOT::DescriptorId_t GetMemFieldId(ROOT::DescriptorId_t onDiskId) const
ROOT::DescriptorId_t MapClusterGroupId(ROOT::DescriptorId_t memId)
ROOT::DescriptorId_t MapFieldId(ROOT::DescriptorId_t memId)
Map an in-memory field ID to its on-disk counterpart.
A helper class for serializing and deserialization of the RNTuple binary format.
static std::uint32_t SerializeXxHash3(const unsigned char *data, std::uint64_t length, std::uint64_t &xxhash3, void *buffer)
Writes a XxHash-3 64bit checksum of the byte range given by data and length.
static constexpr std::uint16_t kFlagDeferredColumn
static RResult< std::vector< ROOT::Internal::RClusterDescriptorBuilder > > DeserializePageListRaw(const void *buffer, std::uint64_t bufSize, ROOT::DescriptorId_t clusterGroupId, const RNTupleDescriptor &desc)
static RResult< std::uint32_t > SerializeSchemaDescription(void *buffer, const RNTupleDescriptor &desc, const RContext &context, bool forHeaderExtension=false)
Serialize the schema description in desc into buffer.
static RResult< std::uint32_t > DeserializeString(const void *buffer, std::uint64_t bufSize, std::string &val)
static constexpr std::uint16_t kEnvelopeTypePageList
static RResult< std::uint32_t > SerializeEnvelopeLink(const REnvelopeLink &envelopeLink, void *buffer)
static std::uint32_t SerializeInt32(std::int32_t val, void *buffer)
static RResult< std::uint32_t > DeserializeEnvelopeLink(const void *buffer, std::uint64_t bufSize, REnvelopeLink &envelopeLink)
static constexpr std::uint16_t kFlagIsSoACollection
static std::uint32_t SerializeUInt32(std::uint32_t val, void *buffer)
static RResult< std::uint32_t > SerializeAttributeSet(const Experimental::RNTupleAttrSetDescriptor &attrSetDesc, void *buffer)
static RResult< std::uint32_t > SerializeFieldStructure(ROOT::ENTupleStructure structure, void *buffer)
While we could just interpret the enums as ints, we make the translation explicit in order to avoid a...
static RResult< std::uint32_t > SerializeEnvelopePostscript(unsigned char *envelope, std::uint64_t size)
static RResult< std::uint32_t > SerializeFeatureFlags(const std::vector< std::uint64_t > &flags, void *buffer)
static std::uint32_t DeserializeUInt32(const void *buffer, std::uint32_t &val)
static RResult< std::uint32_t > DeserializeFrameHeader(const void *buffer, std::uint64_t bufSize, std::uint64_t &frameSize, std::uint32_t &nitems)
static RResult< std::uint32_t > DeserializeAttributeSet(const void *buffer, std::uint64_t bufSize, Experimental::Internal::RNTupleAttrSetDescriptorBuilder &attrSetDescBld)
static RResult< std::uint32_t > DeserializeEnvelope(const void *buffer, std::uint64_t bufSize, std::uint16_t expectedType)
static constexpr std::uint16_t kFlagRepetitiveField
static constexpr int64_t kSuppressedColumnMarker
static RResult< std::uint32_t > SerializeColumnType(ROOT::ENTupleColumnType type, void *buffer)
static std::uint32_t SerializeListFramePreamble(std::uint32_t nitems, void *buffer)
static std::uint32_t SerializeInt16(std::int16_t val, void *buffer)
static RResult< std::uint32_t > SerializeFramePostscript(void *frame, std::uint64_t size)
static constexpr std::uint16_t kEnvelopeTypeFooter
static RResult< std::uint32_t > DeserializeClusterGroup(const void *buffer, std::uint64_t bufSize, RClusterGroup &clusterGroup)
static RResult< std::uint32_t > DeserializeLocator(const void *buffer, std::uint64_t bufSize, RNTupleLocator &locator)
static std::uint32_t SerializeUInt16(std::uint16_t val, void *buffer)
static RResult< void > DeserializePageList(const void *buffer, std::uint64_t bufSize, ROOT::DescriptorId_t clusterGroupId, RNTupleDescriptor &desc, EDescriptorDeserializeMode mode)
static constexpr std::uint16_t kFlagProjectedField
static RResult< void > DeserializeFooter(const void *buffer, std::uint64_t bufSize, ROOT::Internal::RNTupleDescriptorBuilder &descBuilder)
static std::uint32_t DeserializeInt64(const void *buffer, std::int64_t &val)
static std::uint32_t SerializeEnvelopePreamble(std::uint16_t envelopeType, void *buffer)
static std::uint32_t DeserializeInt32(const void *buffer, std::int32_t &val)
static std::uint32_t SerializeString(const std::string &val, void *buffer)
std::map< Int_t, TVirtualStreamerInfo * > StreamerInfoMap_t
static RResult< std::uint32_t > SerializeExtraTypeInfoId(ROOT::EExtraTypeInfoIds id, void *buffer)
static RResult< StreamerInfoMap_t > DeserializeStreamerInfos(const std::string &extraTypeInfoContent)
static std::uint32_t DeserializeUInt16(const void *buffer, std::uint16_t &val)
static constexpr std::uint16_t kFlagHasValueRange
static RResult< void > VerifyXxHash3(const unsigned char *data, std::uint64_t length, std::uint64_t &xxhash3)
Expects an xxhash3 checksum in the 8 bytes following data + length and verifies it.
static RResult< std::uint32_t > SerializeClusterSummary(const RClusterSummary &clusterSummary, void *buffer)
static RResult< std::uint32_t > DeserializeColumnType(const void *buffer, ROOT::ENTupleColumnType &type)
static constexpr ROOT::DescriptorId_t kZeroFieldId
static constexpr std::uint16_t kFlagHasTypeChecksum
static std::uint32_t DeserializeInt16(const void *buffer, std::int16_t &val)
static RResult< std::uint32_t > DeserializeExtraTypeInfoId(const void *buffer, ROOT::EExtraTypeInfoIds &id)
static RResult< std::uint32_t > DeserializeClusterSummary(const void *buffer, std::uint64_t bufSize, RClusterSummary &clusterSummary)
@ kForReading
Deserializes the descriptor and performs fixup on the suppressed column ranges and on clusters,...
@ kRaw
Deserializes the descriptor as-is without performing any additional fixup.
@ kForWriting
Deserializes the descriptor and performs fixup on the suppressed column ranges.
static constexpr std::uint16_t kEnvelopeTypeHeader
static RResult< std::uint32_t > SerializeClusterGroup(const RClusterGroup &clusterGroup, void *buffer)
static std::uint32_t SerializeRecordFramePreamble(void *buffer)
static RResult< std::uint32_t > SerializePageList(void *buffer, const RNTupleDescriptor &desc, std::span< ROOT::DescriptorId_t > physClusterIDs, const RContext &context)
static RResult< std::uint32_t > DeserializeFieldStructure(const void *buffer, ROOT::ENTupleStructure &structure)
static std::uint32_t SerializeInt64(std::int64_t val, void *buffer)
static RResult< void > DeserializeHeader(const void *buffer, std::uint64_t bufSize, ROOT::Internal::RNTupleDescriptorBuilder &descBuilder)
static RResult< std::uint32_t > SerializeFooter(void *buffer, const RNTupleDescriptor &desc, const RContext &context)
static std::uint32_t DeserializeUInt64(const void *buffer, std::uint64_t &val)
static RResult< std::uint32_t > SerializeLocator(const RNTupleLocator &locator, void *buffer)
static RResult< std::uint32_t > DeserializeSchemaDescription(const void *buffer, std::uint64_t bufSize, ROOT::Internal::RNTupleDescriptorBuilder &descBuilder)
static std::uint32_t SerializeUInt64(std::uint64_t val, void *buffer)
static RResult< std::uint32_t > DeserializeFeatureFlags(const void *buffer, std::uint64_t bufSize, std::vector< std::uint64_t > &flags)
static RResult< RContext > SerializeHeader(void *buffer, const RNTupleDescriptor &desc)
static std::string SerializeStreamerInfos(const StreamerInfoMap_t &infos)
The on-storage metadata of an RNTuple.
Generic information about the physical location of data.
Abstract Interface class describing Streamer information for one class.
EExtraTypeInfoIds
Used in RExtraTypeInfoDescriptor.
std::uint64_t DescriptorId_t
Distriniguishes elements of the same type within a descriptor, e.g. different fields.
ENTupleStructure
The fields in the RNTuple data model tree can carry different structural information about the type s...