24class CreateContextGuard;
26 friend class CreateContextGuard;
28 std::vector<std::string> fClassesOnStack;
31 bool fContinueOnError =
false;
34 CreateContext() =
default;
39class CreateContextGuard {
40 CreateContext &fCreateContext;
41 std::size_t fNOriginalClassesOnStack;
42 bool fOriginalContinueOnError;
45 CreateContextGuard(CreateContext &ctx)
46 : fCreateContext(ctx),
47 fNOriginalClassesOnStack(ctx.fClassesOnStack.
size()),
48 fOriginalContinueOnError(ctx.fContinueOnError)
53 fCreateContext.fClassesOnStack.resize(fNOriginalClassesOnStack);
54 fCreateContext.fContinueOnError = fOriginalContinueOnError;
59 if (std::find(fCreateContext.fClassesOnStack.begin(), fCreateContext.fClassesOnStack.end(), cl) !=
60 fCreateContext.fClassesOnStack.end()) {
63 fCreateContext.fClassesOnStack.emplace_back(cl);
77 field.CommitCluster();
126 : fField(
other.fField),
128 fCapacity(
other.fCapacity),
130 fIsAdopted(
other.fIsAdopted),
131 fNValidValues(
other.fNValidValues),
132 fFirstIndex(
other.fFirstIndex)
141 std::swap(fField,
other.fField);
142 std::swap(fDeleter,
other.fDeleter);
143 std::swap(fValues,
other.fValues);
145 std::swap(fCapacity,
other.fCapacity);
147 std::swap(fIsAdopted,
other.fIsAdopted);
148 std::swap(fMaskAvail,
other.fMaskAvail);
149 std::swap(fNValidValues,
other.fNValidValues);
150 std::swap(fFirstIndex,
other.fFirstIndex);
166 for (std::size_t i = 0; i < fCapacity; ++i) {
167 fDeleter->operator()(GetValuePtrAt(i),
true );
171 operator delete(fValues);
176 if (fCapacity <
size) {
178 throw RException(
R__FAIL(
"invalid attempt to bulk read beyond the adopted buffer"));
184 for (std::size_t i = 0; i <
size; ++i) {
185 fField->ConstructValue(GetValuePtrAt(i));
189 fMaskAvail = std::make_unique<bool[]>(
size);
193 std::fill(fMaskAvail.get(), fMaskAvail.get() +
size,
false);
204 fCapacity = capacity;
207 fMaskAvail = std::make_unique<bool[]>(capacity);
222std::unique_ptr<void, typename ROOT::RFieldBase::RCreateObjectDeleter<void>::deleter>
223ROOT::RFieldBase::CreateObject<void>()
const
247 std::string
result = GetFieldName();
248 auto parent = GetParent();
249 while (parent && !parent->GetFieldName().empty()) {
251 parent = parent->GetParent();
263std::vector<ROOT::RFieldBase::RCheckResult>
268 cfOpts.SetReturnInvalidOnError(
true);
269 cfOpts.SetEmulateUnknownTypes(
false);
272 std::vector<RCheckResult>
result;
314 std::unique_ptr<ROOT::RFieldBase>
result;
365 }
else if (
resolvedType.substr(0, 12) ==
"std::vector<") {
369 }
else if (
resolvedType.substr(0, 19) ==
"ROOT::VecOps::RVec<") {
373 }
else if (
resolvedType.substr(0, 11) ==
"std::array<") {
381 }
else if (
resolvedType.substr(0, 13) ==
"std::variant<") {
383 std::vector<std::unique_ptr<RFieldBase>>
items;
385 for (
unsigned int i = 0; i <
innerTypes.size(); ++i) {
390 }
else if (
resolvedType.substr(0, 10) ==
"std::pair<") {
395 std::array<std::unique_ptr<RFieldBase>, 2>
items{
399 }
else if (
resolvedType.substr(0, 11) ==
"std::tuple<") {
401 std::vector<std::unique_ptr<RFieldBase>>
items;
403 for (
unsigned int i = 0; i <
innerTypes.size(); ++i) {
408 }
else if (
resolvedType.substr(0, 12) ==
"std::bitset<") {
411 }
else if (
resolvedType.substr(0, 16) ==
"std::unique_ptr<") {
415 }
else if (
resolvedType.substr(0, 14) ==
"std::optional<") {
423 }
else if (
resolvedType.substr(0, 19) ==
"std::unordered_set<") {
427 }
else if (
resolvedType.substr(0, 14) ==
"std::multiset<") {
431 }
else if (
resolvedType.substr(0, 24) ==
"std::unordered_multiset<") {
445 }
else if (
resolvedType.substr(0, 19) ==
"std::unordered_map<") {
453 }
else if (
resolvedType.substr(0, 14) ==
"std::multimap<") {
461 }
else if (
resolvedType.substr(0, 24) ==
"std::unordered_multimap<") {
465 fnFail(
"the type list for std::unordered_multimap must have exactly two elements"));
470 }
else if (
resolvedType.substr(0, 12) ==
"std::atomic<") {
474 }
else if (
resolvedType.substr(0, 25) ==
"ROOT::RNTupleCardinality<") {
480 result = std::make_unique<RField<RNTupleCardinality<std::uint32_t>>>(
fieldName);
482 result = std::make_unique<RField<RNTupleCardinality<std::uint64_t>>>(
fieldName);
500 if (cl->GetCollectionProxy()) {
501 result = std::make_unique<RProxiedCollectionField>(
fieldName, typeName);
551 }
catch (
const RException &
e) {
552 auto error =
e.GetError();
554 return std::unique_ptr<RFieldBase>(std::make_unique<RInvalidField>(
fieldName, typeName, error.GetReport(),
559 }
catch (
const std::logic_error &
e) {
562 return std::unique_ptr<RFieldBase>(
587 auto clone = CloneImpl(
newName);
588 clone->fTypeAlias = fTypeAlias;
589 clone->fOnDiskId = fOnDiskId;
590 clone->fDescription = fDescription;
592 clone->fColumnRepresentatives = fColumnRepresentatives;
598 R__ASSERT(
false &&
"A non-simple RField must implement its own AppendImpl");
609 ReadGlobalImpl(fPrincipalColumn->GetGlobalIndex(
localIndex), to);
615 std::size_t
nRead = 0;
616 for (std::size_t i = 0; i <
bulkSpec.fCount; ++i) {
634 void *
where =
operator new(GetValueSize());
636 ConstructValue(
where);
642 void *obj = CreateObjectRawPtr();
648 return std::vector<RValue>();
655 if (fState != EState::kUnconnected)
656 throw RException(
R__FAIL(
"invalid attempt to attach subfield to already connected field"));
657 child->fParent =
this;
658 fSubfields.emplace_back(std::move(
child));
664 for (
auto f =
this;
f !=
nullptr;
f =
f->GetParent()) {
665 auto parent =
f->GetParent();
670 result *= std::max(
f->GetNRepetitions(), std::size_t{1U});
677 std::vector<RFieldBase *>
result;
678 result.reserve(fSubfields.size());
679 for (
const auto &
f : fSubfields) {
687 std::vector<const RFieldBase *>
result;
688 result.reserve(fSubfields.size());
689 for (
const auto &
f : fSubfields) {
697 if (!fAvailableColumns.empty()) {
699 for (
auto &column : fAvailableColumns) {
709 if (!fAvailableColumns.empty()) {
711 for (
auto &column : fAvailableColumns) {
715 column->CommitSuppressed();
724 if (fState != EState::kUnconnected)
725 throw RException(
R__FAIL(
"cannot set field description once field is connected"));
731 if (fState != EState::kUnconnected)
740 if (~fTraits & kTraitMappable)
741 return AppendImpl(from);
743 fPrincipalColumn->Append(from);
744 return fPrincipalColumn->GetElement()->GetPackedSize();
763 return RBulkSpec::kAllSet;
766 if (fIsArtificial || !fReadCallbacks.empty()) {
806 if (fColumnRepresentatives.empty()) {
807 return {GetColumnRepresentations().GetSerializationDefault()};
811 result.reserve(fColumnRepresentatives.size());
812 for (
const auto &
r : fColumnRepresentatives) {
820 if (fState != EState::kUnconnected)
821 throw RException(
R__FAIL(
"cannot set column representative once field is connected"));
822 const auto &
validTypes = GetColumnRepresentations().GetSerializationTypes();
823 fColumnRepresentatives.clear();
831 if (std::find_if(fColumnRepresentatives.begin(), fColumnRepresentatives.end(),
832 [&
r](
const auto &
rep) { return r == rep.get(); }) == fColumnRepresentatives.end())
844 throw RException(
R__FAIL(
"No on-disk field information for `" + GetQualifiedFieldName() +
"`"));
853 throw RException(
R__FAIL(
"No on-disk column information for field `" + GetQualifiedFieldName() +
"`"));
858 for (
const auto &t : GetColumnRepresentations().GetDeserializationTypes()) {
870 "` cannot be matched to its in-memory type `" + GetTypeName() +
"` " +
876 fReadCallbacks.push_back(func);
878 return fReadCallbacks.size() - 1;
883 fReadCallbacks.erase(fReadCallbacks.begin() + idx);
884 fIsSimple = (fTraits & kTraitMappable) && !fIsArtificial && fReadCallbacks.empty();
889 if ((options.
GetCompression() == 0) && HasDefaultColumnRepresentative()) {
906 SetColumnRepresentatives({
rep});
909 if (fTypeAlias ==
"Double32_t")
917 if (fState != EState::kUnconnected)
918 throw RException(
R__FAIL(
"invalid attempt to connect an already connected field to a page sink"));
920 AutoAdjustColumnTypes(
pageSink.GetWriteOptions());
923 for (
auto &column : fAvailableColumns) {
931 if (HasExtraTypeInfo()) {
932 pageSink.RegisterOnCommitDatasetCallback(
936 fState = EState::kConnectedToSink;
942 for (
auto &
f : fSubfields)
947 if (fState != EState::kUnconnected)
948 throw RException(
R__FAIL(
"invalid attempt to connect an already connected field to a page source"));
950 if (!fColumnRepresentatives.empty())
951 throw RException(
R__FAIL(
"fixed column representative only valid when connecting to a page sink"));
952 if (!fDescription.empty())
953 throw RException(
R__FAIL(
"setting description only valid when connecting to a page sink"));
955 if (!fIsArtificial) {
961 const auto &desc =
pageSource.GetSharedDescriptorGuard().GetRef();
970 while (
itr->GetParent()) {
974 for (
auto &
f : fParent->fSubfields) {
984 throw RException(
R__FAIL(
"invalid attempt to substitute field " + GetQualifiedFieldName()));
988 if (!fIsArtificial) {
989 const auto &desc =
pageSource.GetSharedDescriptorGuard().GetRef();
990 ReconcileOnDiskField(desc);
993 for (
auto &
f : fSubfields) {
995 f->SetOnDiskId(
pageSource.GetSharedDescriptorGuard()->FindFieldId(
f->GetFieldName(), GetOnDiskId()));
1001 if (!fIsArtificial) {
1004 GenerateColumns(desc);
1005 if (fColumnRepresentatives.empty()) {
1007 for (
const auto &t : GetColumnRepresentations().GetDeserializationTypes()) {
1009 fColumnRepresentatives = {t};
1014 R__ASSERT(!fColumnRepresentatives.empty());
1017 fOnDiskTypeVersion =
fieldDesc.GetTypeVersion();
1018 if (
fieldDesc.GetTypeChecksum().has_value())
1019 fOnDiskTypeChecksum = *
fieldDesc.GetTypeChecksum();
1022 for (
auto &column : fAvailableColumns)
1023 column->ConnectPageSource(fOnDiskId,
pageSource);
1025 fState = EState::kConnectedToSource;
1032 EnsureMatchingOnDiskField(desc).ThrowOnError();
1043 std::ostringstream
errMsg;
1044 errMsg <<
"in-memory field " << GetQualifiedFieldName() <<
" of type " << GetTypeName() <<
" is incompatible "
1045 <<
"with on-disk field " <<
fieldDesc.GetFieldName() <<
":";
1046 if (
diffBits & kDiffFieldVersion) {
1047 errMsg <<
" field version " << GetFieldVersion() <<
" vs. " <<
fieldDesc.GetFieldVersion() <<
";";
1050 errMsg <<
" type version " << GetTypeVersion() <<
" vs. " <<
fieldDesc.GetTypeVersion() <<
";";
1053 errMsg <<
" structural role " << GetStructure() <<
" vs. " <<
fieldDesc.GetStructure() <<
";";
1056 errMsg <<
" incompatible on-disk type name " <<
fieldDesc.GetTypeName() <<
";";
1058 if (
diffBits & kDiffNRepetitions) {
1059 errMsg <<
" repetition count " << GetNRepetitions() <<
" vs. " <<
fieldDesc.GetNRepetitions() <<
";";
1065 const std::vector<std::string> &
prefixes)
const
1069 if (
fieldDesc.GetTypeName().rfind(
p, 0) == 0)
1072 return R__FAIL(
"incompatible type " +
fieldDesc.GetTypeName() +
" for field " + GetQualifiedFieldName() +
"\n" +
1079 if ((~
ignoreBits & kDiffFieldVersion) && (GetFieldVersion() !=
fieldDesc.GetFieldVersion()))
1087 if ((~
ignoreBits & kDiffNRepetitions) && (GetNRepetitions() !=
fieldDesc.GetNRepetitions()))
#define R__FORWARD_RESULT(res)
Short-hand to return an RResult<T> value from a subroutine to the calling stack frame.
#define R__FAIL(msg)
Short-hand to return an RResult<T> in an error state; the RError is implicitly converted into RResult...
#define R__LOG_WARNING(...)
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.
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
winID h TVirtualViewer3D TVirtualGLPainter p
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 r
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 result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
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 child
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
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
Abstract base class for classes implementing the visitor design pattern.
static const char * GetColumnTypeName(ROOT::ENTupleColumnType type)
Abstract interface to write data into an ntuple.
Abstract interface to read data from an ntuple.
Template specializations for C++ std::atomic.
Base class for all ROOT issued exceptions.
Points to an array of objects with RNTuple I/O support, used for bulk reading.
std::unique_ptr< bool[]> fMaskAvail
Masks invalid values in the array.
std::unique_ptr< RFieldBase::RDeleter > fDeleter
void Reset(RNTupleLocalIndex firstIndex, std::size_t size)
Sets a new range for the bulk.
void * fValues
Cached deleter of fField.
RBulkValues & operator=(const RBulkValues &)=delete
RBulkValues(RFieldBase *field)
void AdoptBuffer(void *buf, std::size_t capacity)
The list of column representations a field can have.
Selection_t fSerializationTypes
std::vector< ColumnRepresentation_t > Selection_t
A list of column representations.
Selection_t fDeserializationTypes
The union of the serialization types and the deserialization extra types passed during construction.
Points to an object with RNTuple I/O support and keeps a pointer to the corresponding field.
void BindRawPtr(void *rawPtr)
A field translates read and write calls from/to underlying columns to/from tree values.
void SetColumnRepresentatives(const RColumnRepresentations::Selection_t &representatives)
Fixes a column representative.
ROOT::Internal::RColumn * fPrincipalColumn
All fields that have columns have a distinct main column.
virtual void ReconcileOnDiskField(const RNTupleDescriptor &desc)
For non-artificial fields, check compatibility of the in-memory field and the on-disk field.
ROOT::NTupleSize_t EntryToColumnElementIndex(ROOT::NTupleSize_t globalIndex) const
Translate an entry index to a column element index of the principal column and vice versa.
void Attach(std::unique_ptr< RFieldBase > child)
Add a new subfield to the list of nested fields.
virtual void AcceptVisitor(ROOT::Detail::RFieldVisitor &visitor) const
void FlushColumns()
Flushes data from active columns.
virtual void ReadGlobalImpl(ROOT::NTupleSize_t globalIndex, void *to)
virtual const RColumnRepresentations & GetColumnRepresentations() const
Implementations in derived classes should return a static RColumnRepresentations object.
bool fIsSimple
A field qualifies as simple if it is mappable (which implies it has a single principal column),...
RConstSchemaIterator cbegin() const
void AutoAdjustColumnTypes(const ROOT::RNTupleWriteOptions &options)
When connecting a field to a page sink, the field's default column representation is subject to adjus...
std::vector< const RFieldBase * > GetConstSubfields() const
void SetOnDiskId(ROOT::DescriptorId_t id)
void RemoveReadCallback(size_t idx)
std::vector< RFieldBase * > GetMutableSubfields()
static std::vector< RCheckResult > Check(const std::string &fieldName, const std::string &typeName)
Checks if the given type is supported by RNTuple.
size_t AddReadCallback(ReadCallback_t func)
Set a user-defined function to be called after reading a value, giving a chance to inspect and/or mod...
RConstSchemaIterator cend() const
std::size_t fNRepetitions
For fixed sized arrays, the array length.
std::function< void(void *)> ReadCallback_t
std::size_t Append(const void *from)
Write the given value into columns.
RValue CreateValue()
Generates an object of the field's type, wraps it in a shared pointer and returns it as an RValue con...
const ColumnRepresentation_t & EnsureCompatibleColumnTypes(const ROOT::RNTupleDescriptor &desc, std::uint16_t representationIndex) const
Returns the on-disk column types found in the provided descriptor for fOnDiskId and the given represe...
virtual std::vector< RValue > SplitValue(const RValue &value) const
Creates the list of direct child values given an existing value for this field.
std::string GetQualifiedFieldName() const
Returns the field name and parent field names separated by dots (grandparent.parent....
RBulkValues CreateBulk()
Creates a new, initially empty bulk.
void ConnectPageSink(ROOT::Internal::RPageSink &pageSink, ROOT::NTupleSize_t firstEntry=0)
Fields and their columns live in the void until connected to a physical page storage.
std::size_t ReadBulk(const RBulkSpec &bulkSpec)
Returns the number of newly available values, that is the number of bools in bulkSpec....
std::vector< ROOT::ENTupleColumnType > ColumnRepresentation_t
RResult< void > EnsureMatchingOnDiskField(const RNTupleDescriptor &desc, std::uint32_t ignoreBits=0) const
Compares the field to the corresponding on-disk field information in the provided descriptor.
virtual void ReadInClusterImpl(RNTupleLocalIndex localIndex, void *to)
std::uint32_t fTraits
Properties of the type that allow for optimizations of collections of that type.
virtual std::size_t AppendImpl(const void *from)
Operations on values of complex types, e.g.
RFieldBase * fParent
Subfields point to their mother field.
RFieldBase(std::string_view name, std::string_view type, ROOT::ENTupleStructure structure, bool isSimple, std::size_t nRepetitions=0)
The constructor creates the underlying column objects and connects them to either a sink or a source.
static RResult< std::unique_ptr< RFieldBase > > Create(const std::string &fieldName, const std::string &typeName, const ROOT::RCreateFieldOptions &options, const ROOT::RNTupleDescriptor *desc, ROOT::DescriptorId_t fieldId)
Factory method to resurrect a field from the stored on-disk type information.
std::uint32_t CompareOnDiskField(const RFieldDescriptor &fieldDesc, std::uint32_t ignoreBits) const
Returns a combination of kDiff... flags, indicating peroperties that are different between the field ...
std::string fType
The C++ type captured by this field.
RColumnRepresentations::Selection_t GetColumnRepresentatives() const
Returns the fColumnRepresentative pointee or, if unset (always the case for artificial fields),...
@ kTraitTriviallyDestructible
The type is cleaned up just by freeing its memory. I.e. the destructor performs a no-op.
@ kTraitTriviallyConstructible
No constructor needs to be called, i.e.
@ kTraitMappable
A field of a fundamental type that can be directly mapped via RField<T>::Map(), i....
@ kTraitInvalidField
This field is an instance of RInvalidField and can be safely static_cast to it.
ROOT::ENTupleStructure fStructure
The role of this field in the data model structure.
RValue BindValue(std::shared_ptr< void > objPtr)
Creates a value from a memory location with an already constructed object.
void SetDescription(std::string_view description)
std::unique_ptr< RFieldBase > Clone(std::string_view newName) const
Copies the field and its subfields using a possibly new name and a new, unconnected set of columns.
std::string fName
The field name relative to its parent field.
void CommitCluster()
Flushes data from active columns to disk and calls CommitClusterImpl()
void ConnectPageSource(ROOT::Internal::RPageSource &pageSource)
Connects the field and its subfield tree to the given page source.
RResult< void > EnsureMatchingTypePrefix(const RNTupleDescriptor &desc, const std::vector< std::string > &prefixes) const
Many fields accept a range of type prefixes for schema evolution, e.g.
void * CreateObjectRawPtr() const
Factory method for the field's type. The caller owns the returned pointer.
virtual std::size_t ReadBulkImpl(const RBulkSpec &bulkSpec)
General implementation of bulk read.
Metadata stored for every field of an RNTuple.
The container field for an ntuple model, which itself has no physical representation.
Used in RFieldBase::Check() to record field creation failures.
@ kGeneric
Generic unrecoverable error.
@ kUnknownType
The type given to RFieldBase::Create was unknown.
@ kTypeError
The type given to RFieldBase::Create was invalid.
The on-storage metadata of an RNTuple.
const RFieldDescriptor & GetFieldDescriptor(ROOT::DescriptorId_t fieldId) const
RColumnDescriptorIterable GetColumnIterable() const
Addresses a column element or field item relative to a particular cluster, instead of a global NTuple...
Common user-tunable settings for storing RNTuples.
std::uint32_t GetCompression() const
const_iterator begin() const
const_iterator end() const
The class is used as a return type for operations that can fail; wraps a value of type T or an RError...
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
static TEnum * GetEnum(const std::type_info &ti, ESearchAction sa=kALoadAndInterpLookup)
std::vector< std::string > TokenizeTypeList(std::string_view templateType, std::size_t maxArgs=0)
Used in RFieldBase::Create() in order to get the comma-separated list of template types E....
std::unique_ptr< RFieldBase > CreateEmulatedVectorField(std::string_view fieldName, std::unique_ptr< RFieldBase > itemField, std::string_view emulatedFromType)
RResult< void > EnsureValidNameForRNTuple(std::string_view name, std::string_view where)
Check whether a given string is a valid name according to the RNTuple specification.
ROOT::RLogChannel & NTupleLog()
Log channel for RNTuple diagnostics.
void CallCommitClusterOnField(RFieldBase &)
void CallConnectPageSourceOnField(RFieldBase &, ROOT::Internal::RPageSource &)
unsigned long long ParseUIntTypeToken(const std::string &uintToken)
std::unique_ptr< RFieldBase > CreateEmulatedRecordField(std::string_view fieldName, std::vector< std::unique_ptr< RFieldBase > > itemFields, std::string_view emulatedFromType)
ROOT::RResult< std::unique_ptr< ROOT::RFieldBase > > CallFieldBaseCreate(const std::string &fieldName, const std::string &typeName, const ROOT::RCreateFieldOptions &options, const ROOT::RNTupleDescriptor *desc, ROOT::DescriptorId_t fieldId)
ERNTupleSerializationMode GetRNTupleSerializationMode(TClass *cl)
std::string GetTypeTraceReport(const RFieldBase &field, const RNTupleDescriptor &desc)
Prints the hierarchy of types with their field names and field IDs for the given in-memory field and ...
auto MakeAliasedSharedPtr(T *rawPtr)
std::string GetCanonicalTypePrefix(const std::string &typeName)
Applies RNTuple specific type name normalization rules (see specs) that help the string parsing in RF...
void CallFlushColumnsOnField(RFieldBase &)
std::string GetNormalizedUnresolvedTypeName(const std::string &origName)
Applies all RNTuple type normalization rules except typedef resolution.
void CallConnectPageSinkOnField(RFieldBase &, ROOT::Internal::RPageSink &, ROOT::NTupleSize_t firstEntry=0)
std::uint64_t DescriptorId_t
Distriniguishes elements of the same type within a descriptor, e.g. different fields.
std::uint64_t NTupleSize_t
Integer type long enough to hold the maximum number of entries in a column.
constexpr DescriptorId_t kInvalidDescriptorId
ENTupleStructure
The fields in the RNTuple data model tree can carry different structural information about the type s...
std::string ResolveTypedef(const char *tname, bool resolveAll=false)
bool GetReturnInvalidOnError() const
bool GetEmulateUnknownTypes() const
Input parameter to RFieldBase::ReadBulk() and RFieldBase::ReadBulkImpl().
Used in the return value of the Check() method.
std::default_delete< T > deleter