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
79 static constexpr std::uint16_t kFlagDeferredColumn = 0x01;
80 static constexpr std::uint16_t kFlagHasValueRange = 0x02;
81
82 static constexpr ROOT::DescriptorId_t kZeroFieldId = std::uint64_t(-2);
83
84 static constexpr int64_t kSuppressedColumnMarker = std::numeric_limits<std::int64_t>::min();
85
86 // In the page sink and the streamer field, the seen streamer infos are stored in a map
87 // with the unique streamer info number being the key. Sorted by unique number.
88 using StreamerInfoMap_t = std::map<Int_t, TVirtualStreamerInfo *>;
89
91 std::uint64_t fLength = 0;
93 };
94
96 std::uint64_t fFirstEntry = 0;
97 std::uint64_t fNEntries = 0;
98 std::uint8_t fFlags = 0;
99 };
100
102 std::uint64_t fMinEntry = 0;
103 std::uint64_t fEntrySpan = 0;
104 std::uint32_t fNClusters = 0;
106 };
107
108 /// The serialization context is used for the piecewise serialization of a descriptor. During header serialization,
109 /// the mapping of in-memory field and column IDs to on-disk IDs is built so that it can be used for the
110 /// footer serialization in a second step.
111 class RContext {
112 private:
113 std::uint64_t fHeaderSize = 0;
114 std::uint64_t fHeaderXxHash3 = 0;
115 std::map<ROOT::DescriptorId_t, ROOT::DescriptorId_t> fMem2OnDiskFieldIDs;
116 std::map<ROOT::DescriptorId_t, ROOT::DescriptorId_t> fMem2OnDiskColumnIDs;
117 std::map<ROOT::DescriptorId_t, ROOT::DescriptorId_t> fMem2OnDiskClusterIDs;
118 std::map<ROOT::DescriptorId_t, ROOT::DescriptorId_t> fMem2OnDiskClusterGroupIDs;
119 std::vector<ROOT::DescriptorId_t> fOnDisk2MemFieldIDs;
120 std::vector<ROOT::DescriptorId_t> fOnDisk2MemColumnIDs;
121 std::vector<ROOT::DescriptorId_t> fOnDisk2MemClusterIDs;
122 std::vector<ROOT::DescriptorId_t> fOnDisk2MemClusterGroupIDs;
123
124 public:
125 void SetHeaderSize(std::uint64_t size) { fHeaderSize = size; }
126 std::uint64_t GetHeaderSize() const { return fHeaderSize; }
128 std::uint64_t GetHeaderXxHash3() const { return fHeaderXxHash3; }
129 /// Map an in-memory field ID to its on-disk counterpart. It is allowed to call this function multiple times for
130 /// the same `memId`, in which case the return value is the on-disk ID assigned on the first call.
132 {
133 auto onDiskId = fOnDisk2MemFieldIDs.size();
134 const auto &p = fMem2OnDiskFieldIDs.try_emplace(memId, onDiskId);
135 if (p.second)
136 fOnDisk2MemFieldIDs.push_back(memId);
137 return (*p.first).second;
138 }
139 /// Map an in-memory column ID to its on-disk counterpart. It is allowed to call this function multiple times for
140 /// the same `memId`, in which case the return value is the on-disk ID assigned on the first call.
141 /// Note that we only map physical column IDs. Logical column IDs of alias columns are shifted before the
142 /// serialization of the extension header. Also, we only need to query physical column IDs for the page list
143 /// serialization.
145 {
146 auto onDiskId = fOnDisk2MemColumnIDs.size();
147 const auto &p = fMem2OnDiskColumnIDs.try_emplace(memId, onDiskId);
148 if (p.second)
149 fOnDisk2MemColumnIDs.push_back(memId);
150 return (*p.first).second;
151 }
166 /// Map in-memory field and column IDs to their on-disk counterparts. This function is unconditionally called
167 /// during header serialization. This function must be manually called after an incremental schema update as page
168 /// list serialization requires all columns to be mapped.
169 void MapSchema(const RNTupleDescriptor &desc, bool forHeaderExtension);
170
197
198 /// Return a vector containing the in-memory field ID for each on-disk counterpart, in order, i.e. the `i`-th
199 /// value corresponds to the in-memory field ID for `i`-th on-disk ID
200 const std::vector<ROOT::DescriptorId_t> &GetOnDiskFieldList() const { return fOnDisk2MemFieldIDs; }
201 };
202
203 /// Writes a XxHash-3 64bit checksum of the byte range given by data and length.
204 static std::uint32_t
205 SerializeXxHash3(const unsigned char *data, std::uint64_t length, std::uint64_t &xxhash3, void *buffer);
206 /// Expects an xxhash3 checksum in the 8 bytes following data + length and verifies it.
207 static RResult<void> VerifyXxHash3(const unsigned char *data, std::uint64_t length, std::uint64_t &xxhash3);
208 static RResult<void> VerifyXxHash3(const unsigned char *data, std::uint64_t length);
209
210 static std::uint32_t SerializeInt16(std::int16_t val, void *buffer);
211 static std::uint32_t DeserializeInt16(const void *buffer, std::int16_t &val);
212 static std::uint32_t SerializeUInt16(std::uint16_t val, void *buffer);
213 static std::uint32_t DeserializeUInt16(const void *buffer, std::uint16_t &val);
214
215 static std::uint32_t SerializeInt32(std::int32_t val, void *buffer);
216 static std::uint32_t DeserializeInt32(const void *buffer, std::int32_t &val);
217 static std::uint32_t SerializeUInt32(std::uint32_t val, void *buffer);
218 static std::uint32_t DeserializeUInt32(const void *buffer, std::uint32_t &val);
219
220 static std::uint32_t SerializeInt64(std::int64_t val, void *buffer);
221 static std::uint32_t DeserializeInt64(const void *buffer, std::int64_t &val);
222 static std::uint32_t SerializeUInt64(std::uint64_t val, void *buffer);
223 static std::uint32_t DeserializeUInt64(const void *buffer, std::uint64_t &val);
224
225 static std::uint32_t SerializeString(const std::string &val, void *buffer);
226 static RResult<std::uint32_t> DeserializeString(const void *buffer, std::uint64_t bufSize, std::string &val);
227
228 /// While we could just interpret the enums as ints, we make the translation explicit
229 /// in order to avoid accidentally changing the on-disk numbers when adjusting the enum classes.
233 static RResult<std::uint32_t> DeserializeFieldStructure(const void *buffer, ROOT::ENTupleStructure &structure);
236
237 static std::uint32_t SerializeEnvelopePreamble(std::uint16_t envelopeType, void *buffer);
238 static RResult<std::uint32_t> SerializeEnvelopePostscript(unsigned char *envelope, std::uint64_t size);
240 SerializeEnvelopePostscript(unsigned char *envelope, std::uint64_t size, std::uint64_t &xxhash3);
241 // The bufSize must include the 8 bytes for the final xxhash3 checksum.
243 DeserializeEnvelope(const void *buffer, std::uint64_t bufSize, std::uint16_t expectedType);
245 DeserializeEnvelope(const void *buffer, std::uint64_t bufSize, std::uint16_t expectedType, std::uint64_t &xxhash3);
246
247 static std::uint32_t SerializeRecordFramePreamble(void *buffer);
248 static std::uint32_t SerializeListFramePreamble(std::uint32_t nitems, void *buffer);
249 static RResult<std::uint32_t> SerializeFramePostscript(void *frame, std::uint64_t size);
251 DeserializeFrameHeader(const void *buffer, std::uint64_t bufSize, std::uint64_t &frameSize, std::uint32_t &nitems);
253 DeserializeFrameHeader(const void *buffer, std::uint64_t bufSize, std::uint64_t &frameSize);
254
255 // An empty flags vector will be serialized as a single, zero feature flag
256 // The most significant bit in every flag is reserved and must _not_ be set
257 static RResult<std::uint32_t> SerializeFeatureFlags(const std::vector<std::uint64_t> &flags, void *buffer);
259 DeserializeFeatureFlags(const void *buffer, std::uint64_t bufSize, std::vector<std::uint64_t> &flags);
260
262 static RResult<std::uint32_t> SerializeEnvelopeLink(const REnvelopeLink &envelopeLink, void *buffer);
263 static RResult<std::uint32_t> DeserializeLocator(const void *buffer, std::uint64_t bufSize, RNTupleLocator &locator);
265 DeserializeEnvelopeLink(const void *buffer, std::uint64_t bufSize, REnvelopeLink &envelopeLink);
266
267 static RResult<std::uint32_t> SerializeClusterSummary(const RClusterSummary &clusterSummary, void *buffer);
268 static RResult<std::uint32_t> SerializeClusterGroup(const RClusterGroup &clusterGroup, void *buffer);
270 DeserializeClusterSummary(const void *buffer, std::uint64_t bufSize, RClusterSummary &clusterSummary);
272 DeserializeClusterGroup(const void *buffer, std::uint64_t bufSize, RClusterGroup &clusterGroup);
273
274 /// Serialize the schema description in `desc` into `buffer`. If `forHeaderExtension` is true, serialize only the
275 /// fields and columns tagged as part of the header extension (see `RNTupleDescriptorBuilder::BeginHeaderExtension`).
277 const RContext &context, bool forHeaderExtension = false);
278 static RResult<std::uint32_t> DeserializeSchemaDescription(const void *buffer, std::uint64_t bufSize,
280
284 DeserializeAttributeSet(const void *buffer, std::uint64_t bufSize,
286
287 static RResult<RContext> SerializeHeader(void *buffer, const RNTupleDescriptor &desc);
288 static RResult<std::uint32_t> SerializePageList(void *buffer, const RNTupleDescriptor &desc,
289 std::span<ROOT::DescriptorId_t> physClusterIDs,
290 const RContext &context);
291 static RResult<std::uint32_t> SerializeFooter(void *buffer, const RNTupleDescriptor &desc, const RContext &context);
292
293 static RResult<void>
295 static RResult<void>
297
299 /// Deserializes the descriptor as-is without performing any additional fixup. The produced descriptor is
300 /// unsuitable for reading or writing, but it's a faithful representation of the on-disk information.
301 kRaw,
302 /// Deserializes the descriptor and performs fixup on the suppressed column ranges. This produces a descriptor
303 /// that is suitable for writing, but not reading.
305 /// Deserializes the descriptor and performs fixup on the suppressed column ranges and on clusters, taking
306 /// into account the header extension. This produces a descriptor that is suitable for reading.
308 };
309 // The clusters vector must be initialized with the cluster summaries corresponding to the page list
310 static RResult<void> DeserializePageList(const void *buffer, std::uint64_t bufSize,
313
314 // Helper functions to (de-)serialize the streamer info type extra information
315 static std::string SerializeStreamerInfos(const StreamerInfoMap_t &infos);
317}; // class RNTupleSerializer
318
319} // namespace Internal
320} // namespace ROOT
321
322#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 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...