48#include <unordered_set>
79 fSubfieldsInfo(
source.fSubfieldsInfo),
80 fMaxAlignment(
source.fMaxAlignment)
82 for (
const auto &
f :
source.GetConstSubfields()) {
100 " cannot be constructed from a class that's not at least Interpreted"));
111 "use RProxiedCollectionField instead"));
140 " virtually inherits from " +
baseClass->GetName()));
163 std::string typeName{
dataMember->GetTrueTypeName()};
170 for (
int dim = 0,
n =
dataMember->GetArrayDim(); dim <
n; ++dim) {
195 for (
const auto &[
_,
si] : fStagingItems) {
196 if (!(
si.fField->GetTraits() & kTraitTriviallyDestructible)) {
197 auto deleter =
si.fField->GetDeleter();
198 deleter->operator()(fStagingArea.get() +
si.fOffset,
true );
206 fMaxAlignment = std::max(fMaxAlignment,
child->GetAlignment());
207 fSubfieldsInfo.push_back(
info);
238 std::size_t
nskip = 0;
245 <<
"ignoring I/O customization rule with unsupported type: " <<
rule->GetRuleType();
256 <<
"ignoring I/O customization rule due to conflicting source member type: " <<
itrSrc->second <<
" vs. "
268 if (
rule->GetTarget() ==
nullptr) {
289 for (
unsigned i = 0; i < fSubfields.size(); i++) {
290 nbytes += CallAppendOn(*fSubfields[i],
static_cast<const unsigned char *
>(from) + fSubfieldsInfo[i].fOffset);
297 for (
const auto &[
_,
si] : fStagingItems) {
300 for (
unsigned i = 0; i < fSubfields.size(); i++) {
301 CallReadOn(*fSubfields[i],
globalIndex,
static_cast<unsigned char *
>(to) + fSubfieldsInfo[i].fOffset);
307 for (
const auto &[
_,
si] : fStagingItems) {
308 CallReadOn(*
si.fField,
localIndex, fStagingArea.get() +
si.fOffset);
310 for (
unsigned i = 0; i < fSubfields.size(); i++) {
311 CallReadOn(*fSubfields[i],
localIndex,
static_cast<unsigned char *
>(to) + fSubfieldsInfo[i].fOffset);
337 if (
classVersion != GetTypeVersion() || className != GetTypeName()) {
339 if (!fStagingClass) {
366 throw RException(
R__FAIL(std::string(
"cannot find on disk rule source member ") + GetTypeName() +
"." +
388 for (
const auto &[
_,
si] : fStagingItems) {
389 if (!(
si.fField->GetTraits() & kTraitTriviallyConstructible)) {
390 CallConstructValueOn(*
si.fField, fStagingArea.get() +
si.fOffset);
398 auto func =
rule->GetReadFunctionPointer();
399 if (func ==
nullptr) {
404 TVirtualObject onfileObj{nullptr};
414 std::vector<const TSchemaRule *>
rules;
421 rules = FindRules(
nullptr);
423 SetStagingClass(GetTypeName(), GetTypeVersion());
444 throw RException(
R__FAIL(
"incompatible type name for field " + GetFieldName() +
": " + GetTypeName() +
449 if (!
rules.empty()) {
452 for (
auto &[
_,
si] : fStagingItems)
457 if (!
rule->GetTarget())
468 AddReadCallbacksFromIORule(
rule);
472 for (
auto &
field : fSubfields) {
474 field->SetArtificial();
492 std::vector<RValue>
result;
494 result.reserve(fSubfields.size());
495 for (
unsigned i = 0; i < fSubfields.size(); i++) {
497 fSubfields[i]->BindValue(std::shared_ptr<void>(
value.GetPtr<
void>(),
basePtr + fSubfieldsInfo[i].fOffset)));
504 return fClass->GetClassSize();
509 return fClass->GetClassVersion();
514 return fClass->GetCheckSum();
519 visitor.VisitClassField(*
this);
538 switch (
enump->GetUnderlyingType()) {
557 std::unique_ptr<RFieldBase>
intField)
566 auto newIntField = fSubfields[0]->Clone(fSubfields[0]->GetFieldName());
572 std::vector<RValue>
result;
573 result.emplace_back(fSubfields[0]->BindValue(
value.GetPtr<
void>()));
584std::string ROOT::RPairField::RPairField::GetTypeList(
const std::array<std::unique_ptr<RFieldBase>, 2> &
itemFields)
590 const std::array<std::size_t, 2> &offsets)
631 (
ifuncs.fNext !=
nullptr));
640 if (!
classp->GetCollectionProxy())
644 "std::set<",
"std::unordered_set<",
"std::multiset<",
"std::unordered_multiset<",
645 "std::map<",
"std::unordered_map<",
"std::multimap<",
"std::unordered_multimap<"};
664 if (
fProxy->HasPointers())
665 throw RException(
R__FAIL(
"collection proxies whose value type is a pointer are not supported"));
684 throw RException(
R__FAIL(
"custom associative collection proxies not supported"));
686 std::unique_ptr<ROOT::RFieldBase>
itemField;
692 switch (
fProxy->GetType()) {
716 auto newItemField = fSubfields[0]->Clone(fSubfields[0]->GetFieldName());
717 return std::unique_ptr<RProxiedCollectionField>(
727 (fCollectionType ==
kSTLvector ? fItemSize : 0U)}) {
728 nbytes += CallAppendOn(*fSubfields[0], ptr);
733 fPrincipalColumn->Append(&fNWritten);
734 return nbytes + fPrincipalColumn->GetElement()->GetPackedSize();
749 (fCollectionType ==
kSTLvector || obj != to ? fItemSize : 0U)}) {
785 return std::make_unique<RProxiedCollectionDeleter>(fProxy, GetDeleterOf(*fSubfields[0]),
itemSize);
787 return std::make_unique<RProxiedCollectionDeleter>(fProxy);
795 fItemDeleter->operator()(ptr,
true );
798 fProxy->Destructor(
objPtr,
true );
804 std::vector<RValue>
result;
808 (fCollectionType ==
kSTLvector ? fItemSize : 0U)}) {
809 result.emplace_back(fSubfields[0]->BindValue(std::shared_ptr<void>(
value.GetPtr<
void>(), ptr)));
816 visitor.VisitProxiedCollectionField(*
this);
850 RCallbackStreamerInfo fCallbackStreamerInfo;
901 fClass->Streamer(
const_cast<void *
>(from), buffer);
903 auto nbytes = buffer.Length();
904 fAuxiliaryColumn->AppendV(buffer.Buffer(), buffer.Length());
906 fPrincipalColumn->Append(&fIndex);
907 return nbytes + fPrincipalColumn->GetElement()->GetPackedSize();
918 fClass->Streamer(to, buffer);
956 .TypeVersion(GetTypeVersion())
957 .TypeName(GetTypeName())
964 return std::min(
alignof(std::max_align_t), GetValueSize());
969 return fClass->GetClassSize();
974 return fClass->GetClassVersion();
979 return fClass->GetCheckSum();
984 visitor.VisitStreamerField(*
this);
1001 Attach(
source.GetConstSubfields()[0]->Clone(
"fUniqueID"));
1024 auto *obj =
static_cast<const TObject *
>(from);
1030 nbytes += CallAppendOn(*fSubfields[0],
reinterpret_cast<const unsigned char *
>(from) + GetOffsetUniqueID());
1032 UInt_t bits = *
reinterpret_cast<const UInt_t *
>(
reinterpret_cast<const unsigned char *
>(from) + GetOffsetBits());
1034 nbytes += CallAppendOn(*fSubfields[1], &bits);
1043 auto *obj =
static_cast<TObject *
>(to);
1048 *
reinterpret_cast<UInt_t *
>(
reinterpret_cast<unsigned char *
>(to) + GetOffsetUniqueID()) =
uniqueID;
1052 *
reinterpret_cast<UInt_t *
>(
reinterpret_cast<unsigned char *
>(to) + GetOffsetBits()) = bits;
1067 CallReadOn(*fSubfields[1],
localIndex, &bits);
1073 if (GetOnDiskTypeVersion() != 1) {
1074 throw RException(
R__FAIL(
"unsupported on-disk version of TObject: " + std::to_string(GetTypeVersion())));
1095 std::vector<RValue>
result;
1098 fSubfields[0]->BindValue(std::shared_ptr<void>(
value.GetPtr<
void>(),
basePtr + GetOffsetUniqueID())));
1100 fSubfields[1]->BindValue(std::shared_ptr<void>(
value.GetPtr<
void>(),
basePtr + GetOffsetBits())));
1116 visitor.VisitTObjectField(*
this);
1121std::string ROOT::RTupleField::RTupleField::GetTypeList(
const std::vector<std::unique_ptr<RFieldBase>> &
itemFields)
1125 throw RException(
R__FAIL(
"the type list for std::tuple must have at least one element"));
1126 for (
size_t i = 0; i <
itemFields.size(); ++i) {
1134 const std::vector<std::size_t> &offsets)
1156 for (
unsigned i = 0; i <
fSubfields.size(); ++i) {
1157 std::string
memberName(
"_" + std::to_string(i));
1173 std::variant<char> t;
1174 constexpr auto sizeOfT =
sizeof(t);
1176 static_assert(
sizeOfT == 2 ||
sizeOfT == 8,
"unsupported std::variant layout");
1180template <std::
size_t VariantSizeT>
1182 using ValueType_t =
typename std::conditional_t<
VariantSizeT == 1, std::uint8_t,
1183 typename std::conditional_t<VariantSizeT == 4, std::uint32_t, void>>;
1191 for (
size_t i = 0; i <
itemFields.size(); ++i) {
1201 fMaxItemSize(
source.fMaxItemSize),
1202 fMaxAlignment(
source.fMaxAlignment),
1203 fTagOffset(
source.fTagOffset),
1204 fVariantOffset(
source.fVariantOffset),
1207 for (
const auto &
f :
source.GetConstSubfields())
1208 Attach(
f->Clone(
f->GetFieldName()));
1224 for (
unsigned int i = 0; i <
nFields; ++i) {
1235 auto dm =
reinterpret_cast<TDataMember *
>(cl->GetListOfDataMembers()->First());
1253 return (tag ==
TagType_t(-1)) ? 0 : tag + 1;
1265 auto tag = GetTag(from, fTagOffset);
1269 nbytes += CallAppendOn(*fSubfields[tag - 1],
reinterpret_cast<const unsigned char *
>(from) + fVariantOffset);
1270 index = fNWritten[tag - 1]++;
1288 void *
varPtr =
reinterpret_cast<unsigned char *
>(to) + fVariantOffset;
1289 CallConstructValueOn(*fSubfields[tag - 1],
varPtr);
1292 SetTag(to, fTagOffset, tag);
1314 CallConstructValueOn(*fSubfields[0],
reinterpret_cast<unsigned char *
>(
where) + fVariantOffset);
1315 SetTag(
where, fTagOffset, 1);
1320 auto tag = GetTag(
objPtr, fTagOffset);
1322 fItemDeleters[tag - 1]->operator()(
reinterpret_cast<unsigned char *
>(
objPtr) + fVariantOffset,
true );
1331 for (
const auto &
f : fSubfields) {
1334 return std::make_unique<RVariantDeleter>(fTagOffset, fVariantOffset, std::move(
itemDeleters));
1339 return std::max(fMaxAlignment,
alignof(RVariantTag<
GetVariantTagSize()>::ValueType_t));
1352 std::fill(fNWritten.begin(), fNWritten.end(), 0);
#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.
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 target
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 void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t 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 mode
Abstract base class for classes implementing the visitor design pattern.
Holds the index and the tag of a kSwitch column.
static std::string SerializeStreamerInfos(const StreamerInfoMap_t &infos)
Abstract interface to read data from an ntuple.
void operator()(void *objPtr, bool dtorOnly) final
The field for a class with dictionary.
void AddReadCallbacksFromIORule(const TSchemaRule *rule)
Register post-read callback corresponding to a ROOT I/O customization rules.
std::size_t AppendImpl(const void *from) final
Operations on values of complex types, e.g.
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
size_t GetAlignment() const final
As a rule of thumb, the alignment is equal to the size of the type.
void ReadGlobalImpl(ROOT::NTupleSize_t globalIndex, void *to) final
void Attach(std::unique_ptr< RFieldBase > child, RSubFieldInfo info)
void ConstructValue(void *where) const final
Constructs value in a given location of size at least GetValueSize(). Called by the base class' Creat...
void AcceptVisitor(ROOT::Detail::RFieldVisitor &visitor) const final
std::vector< const TSchemaRule * > FindRules(const ROOT::RFieldDescriptor *fieldDesc)
Given the on-disk information from the page source, find all the I/O customization rules that apply t...
ROOT::DescriptorId_t LookupMember(const ROOT::RNTupleDescriptor &desc, std::string_view memberName, ROOT::DescriptorId_t classFieldId)
Returns the id of member 'name' in the class field given by 'fieldId', or kInvalidDescriptorId if no ...
void ReadInClusterImpl(RNTupleLocalIndex localIndex, void *to) final
std::uint32_t GetTypeVersion() const final
Indicates an evolution of the C++ type itself.
size_t GetValueSize() const final
The number of bytes taken by a value of the appropriate type.
void PrepareStagingArea(const std::vector< const TSchemaRule * > &rules, const ROOT::RNTupleDescriptor &desc, const ROOT::RFieldDescriptor &classFieldId)
If there are rules with inputs (source members), create the staging area according to the TClass inst...
std::vector< RValue > SplitValue(const RValue &value) const final
Creates the list of direct child values given an existing value for this field.
std::uint32_t GetTypeChecksum() const final
Return the current TClass reported checksum of this class. Only valid if kTraitTypeChecksum is set.
static constexpr const char * kPrefixInherited
Prefix used in the subfield names generated for base classes.
void SetStagingClass(const std::string &className, unsigned int classVersion)
Sets fStagingClass according to the given name and version.
void BeforeConnectPageSource(ROOT::Internal::RPageSource &pageSource) final
Called by ConnectPageSource() before connecting; derived classes may override this as appropriate.
The field for an unscoped or scoped enum with dictionary.
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
std::vector< RValue > SplitValue(const RValue &value) const final
Creates the list of direct child values given an existing value for this field.
void AcceptVisitor(ROOT::Detail::RFieldVisitor &visitor) const final
REnumField(std::string_view fieldName, TEnum *enump)
Base class for all ROOT issued exceptions.
The list of column representations a field can have.
Points to an object with RNTuple I/O support and keeps a pointer to the corresponding field.
A field translates read and write calls from/to underlying columns to/from tree values.
void Attach(std::unique_ptr< RFieldBase > child)
Add a new subfield to the list of nested fields.
std::vector< std::unique_ptr< RFieldBase > > fSubfields
Collections and classes own subfields.
virtual void AfterConnectPageSource()
Called by ConnectPageSource() once connected; derived classes may override this as appropriate.
friend class ROOT::RClassField
std::uint32_t fTraits
Properties of the type that allow for optimizations of collections of that type.
@ 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.
@ kTraitTypeChecksum
The TClass checksum is set and valid.
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::string fTypeAlias
A typedef or using name that was used when creating the field.
const std::string & GetTypeName() const
Metadata stored for every field of an RNTuple.
Classes with dictionaries that can be inspected by TClass.
RField(std::string_view name)
RMapField(std::string_view fieldName, std::string_view typeName, std::unique_ptr< RFieldBase > itemField)
The on-storage metadata of an RNTuple.
RFieldDescriptorIterable GetFieldIterable(const RFieldDescriptor &fieldDesc) const
const RFieldDescriptor & GetFieldDescriptor(ROOT::DescriptorId_t fieldId) const
std::string GetTypeNameForComparison(const RFieldDescriptor &fieldDesc) const
Adjust the type name of the passed RFieldDescriptor for comparison with another renormalized type nam...
ROOT::DescriptorId_t FindFieldId(std::string_view fieldName, ROOT::DescriptorId_t parentId) const
Addresses a column element or field item relative to a particular cluster, instead of a global NTuple...
Template specializations for C++ std::pair.
RPairField(std::string_view fieldName, std::array< std::unique_ptr< RFieldBase >, 2 > itemFields, const std::array< std::size_t, 2 > &offsets)
Allows for iterating over the elements of a proxied collection.
static RIteratorFuncs GetIteratorFuncs(TVirtualCollectionProxy *proxy, bool readFromDisk)
void operator()(void *objPtr, bool dtorOnly) final
The field for a class representing a collection of elements via TVirtualCollectionProxy.
void GenerateColumns() final
Implementations in derived classes should create the backing columns corresponding to the field type ...
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
const RColumnRepresentations & GetColumnRepresentations() const final
Implementations in derived classes should return a static RColumnRepresentations object.
void ConstructValue(void *where) const final
Constructs value in a given location of size at least GetValueSize(). Called by the base class' Creat...
RProxiedCollectionField(std::string_view fieldName, TClass *classp)
Constructor used when the value type of the collection is not known in advance, i....
RCollectionIterableOnce::RIteratorFuncs fIFuncsWrite
void AcceptVisitor(ROOT::Detail::RFieldVisitor &visitor) const final
RCollectionIterableOnce::RIteratorFuncs fIFuncsRead
Two sets of functions to operate on iterators, to be used depending on the access type.
std::shared_ptr< TVirtualCollectionProxy > fProxy
The collection proxy is needed by the deleters and thus defined as a shared pointer.
void ReadGlobalImpl(ROOT::NTupleSize_t globalIndex, void *to) final
std::size_t AppendImpl(const void *from) final
Operations on values of complex types, e.g.
std::unique_ptr< RDeleter > GetDeleter() const final
std::vector< RValue > SplitValue(const RValue &value) const final
Creates the list of direct child values given an existing value for this field.
const_iterator begin() const
const_iterator end() const
The field for an untyped record.
void AttachItemFields(std::vector< std::unique_ptr< RFieldBase > > itemFields)
std::vector< std::size_t > fOffsets
RSetField(std::string_view fieldName, std::string_view typeName, std::unique_ptr< RFieldBase > itemField)
void operator()(void *objPtr, bool dtorOnly) final
The field for a class using ROOT standard streaming.
ROOT::RExtraTypeInfoDescriptor GetExtraTypeInfo() const final
void ReadGlobalImpl(ROOT::NTupleSize_t globalIndex, void *to) final
std::uint32_t GetTypeVersion() const final
Indicates an evolution of the C++ type itself.
void GenerateColumns() final
Implementations in derived classes should create the backing columns corresponding to the field type ...
void ConstructValue(void *where) const final
Constructs value in a given location of size at least GetValueSize(). Called by the base class' Creat...
void BeforeConnectPageSource(ROOT::Internal::RPageSource &pageSource) final
Called by ConnectPageSource() before connecting; derived classes may override this as appropriate.
std::uint32_t GetTypeChecksum() const final
Return the current TClass reported checksum of this class. Only valid if kTraitTypeChecksum is set.
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
std::size_t AppendImpl(const void *from) final
Operations on values of complex types, e.g.
void AcceptVisitor(ROOT::Detail::RFieldVisitor &visitor) const final
RStreamerField(std::string_view fieldName, TClass *classp)
size_t GetAlignment() const final
As a rule of thumb, the alignment is equal to the size of the type.
const RColumnRepresentations & GetColumnRepresentations() const final
Implementations in derived classes should return a static RColumnRepresentations object.
size_t GetValueSize() const final
The number of bytes taken by a value of the appropriate type.
RTupleField(std::string_view fieldName, std::vector< std::unique_ptr< RFieldBase > > itemFields, const std::vector< std::size_t > &offsets)
void operator()(void *objPtr, bool dtorOnly) final
Template specializations for C++ std::variant.
static std::string GetTypeList(const std::vector< std::unique_ptr< RFieldBase > > &itemFields)
std::size_t AppendImpl(const void *from) final
Operations on values of complex types, e.g.
size_t GetAlignment() const final
As a rule of thumb, the alignment is equal to the size of the type.
static constexpr std::size_t kMaxVariants
std::vector< ROOT::Internal::RColumnIndex::ValueType > fNWritten
static std::uint8_t GetTag(const void *variantPtr, std::size_t tagOffset)
Extracts the index from an std::variant and transforms it into the 1-based index used for the switch ...
void GenerateColumns() final
Implementations in derived classes should create the backing columns corresponding to the field type ...
size_t fVariantOffset
In the std::variant memory layout, the actual union of types may start at an offset > 0.
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
size_t GetValueSize() const final
The number of bytes taken by a value of the appropriate type.
std::unique_ptr< RDeleter > GetDeleter() const final
const RColumnRepresentations & GetColumnRepresentations() const final
Implementations in derived classes should return a static RColumnRepresentations object.
void ConstructValue(void *where) const final
Constructs value in a given location of size at least GetValueSize(). Called by the base class' Creat...
size_t fTagOffset
In the std::variant memory layout, at which byte number is the index stored.
RVariantField(std::string_view name, const RVariantField &source)
void ReadGlobalImpl(ROOT::NTupleSize_t globalIndex, void *to) final
static void SetTag(void *variantPtr, std::size_t tagOffset, std::uint8_t tag)
void CommitClusterImpl() final
The concrete implementation of TBuffer for writing/reading to/from a ROOT file or socket.
TClass instances represent classes, structs and namespaces in the ROOT type system.
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
Int_t Size() const
Return size of object of this class.
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
Long_t ClassProperty() const
Return the C++ property of this class, eg.
Long_t Property() const override
Returns the properties of the TClass as a bit field stored as a Long_t value.
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.
All ROOT classes may have RTTI (run time type identification) support added.
The TEnum class implements the enum type.
static TEnum * GetEnum(const std::type_info &ti, ESearchAction sa=kALoadAndInterpLookup)
Mother of all ROOT objects.
@ kIsOnHeap
object is on heap
@ kNotDeleted
object has not been deleted
@ kIsReferenced
if object is referenced by a TRef or TRefArray
RAII helper class that ensures that PushProxy() / PopProxy() are called when entering / leaving a C++...
Defines a common interface to inspect/change the contents of an object that represents a collection.
@ kNeedDelete
The collection contains directly or indirectly (via other collection) some pointers that need explici...
Abstract Interface class describing Streamer information for one class.
ROOT::RLogChannel & NTupleLog()
Log channel for RNTuple diagnostics.
void CallConnectPageSourceOnField(RFieldBase &, ROOT::Internal::RPageSource &)
bool NeedsMetaNameAsAlias(const std::string &metaNormalizedName, std::string &renormalizedAlias, bool isArgInTemplatedUserClass=false)
Checks if the meta normalized name is different from the RNTuple normalized name in a way that would ...
ERNTupleSerializationMode GetRNTupleSerializationMode(TClass *cl)
std::string GetNormalizedUnresolvedTypeName(const std::string &origName)
Applies all RNTuple type normalization rules except typedef resolution.
std::string GetRenormalizedTypeName(const std::string &metaNormalizedName)
Given a type name normalized by ROOT meta, renormalize it for RNTuple. E.g., insert std::prefix.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
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 ntuple model tree can carry different structural information about the type system.
void GetNormalizedName(std::string &norm_name, std::string_view name)
Return the normalized name.