Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
ROOT::Experimental::Detail::RFieldBase Class Referenceabstract

Definition at line 77 of file RField.hxx.

Classes

class  RSchemaIterator
 Iterates over the sub tree of fields in depth-first search order. More...
 

Public Member Functions

 RFieldBase (const RFieldBase &)=delete
 
 RFieldBase (RFieldBase &&)=default
 
 RFieldBase (std::string_view name, std::string_view type, 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.
 
virtual ~RFieldBase ()
 
virtual void AcceptVisitor (RFieldVisitor &visitor) const
 
std::size_t Append (const RFieldValue &value)
 Write the given value into columns.
 
void Attach (std::unique_ptr< Detail::RFieldBase > child)
 Add a new subfield to the list of nested fields.
 
RSchemaIterator begin ()
 
virtual RFieldValue CaptureValue (void *where)=0
 Creates a value from a memory location with an already constructed object.
 
std::unique_ptr< RFieldBaseClone (std::string_view newName) const
 Copies the field and its sub fields using a possibly new name and a new, unconnected set of columns.
 
virtual void CommitCluster ()
 Perform housekeeping tasks for global to cluster-local index translation.
 
void ConnectPageSink (RPageSink &pageSink)
 Fields and their columns live in the void until connected to a physical page storage.
 
void ConnectPageSource (RPageSource &pageSource)
 
virtual void DestroyValue (const RFieldValue &value, bool dtorOnly=false)
 Releases the resources acquired during GenerateValue (memory and constructor) This implementation works for simple types but needs to be overwritten for complex ones.
 
RSchemaIterator end ()
 
void Flush () const
 Ensure that all received items are written from page buffers to the storage.
 
RFieldValue GenerateValue ()
 Generates an object of the field type and allocates new initialized memory according to the type.
 
virtual RFieldValue GenerateValue (void *where)=0
 Generates a tree value in a given location of size at least GetValueSize().
 
virtual size_t GetAlignment () const
 For many types, the alignment requirement is equal to the size; otherwise override.
 
std::string GetDescription () const
 Get the field's description.
 
virtual std::uint32_t GetFieldVersion () const
 Indicates an evolution of the mapping scheme from C++ type to columns.
 
std::string GetName () const
 
NTupleSize_t GetNElements () const
 
std::size_t GetNRepetitions () const
 
DescriptorId_t GetOnDiskId () const
 
RFieldBaseGetParent () const
 
ENTupleStructure GetStructure () const
 
std::vector< RFieldBase * > GetSubFields () const
 
int GetTraits () const
 
std::string GetType () const
 
virtual std::uint32_t GetTypeVersion () const
 Indicates an evolution of the C++ type itself.
 
virtual size_t GetValueSize () const =0
 The number of bytes taken by a value of the appropriate type.
 
bool HasReadCallbacks () const
 
bool IsSimple () const
 
RFieldBaseoperator= (const RFieldBase &)=delete
 
RFieldBaseoperator= (RFieldBase &&)=default
 
void Read (const RClusterIndex &clusterIndex, RFieldValue *value)
 
void Read (NTupleSize_t globalIndex, RFieldValue *value)
 Populate a single value with data from the tree, which needs to be of the fitting type.
 
void SetDescription (std::string_view description)
 
void SetOnDiskId (DescriptorId_t id)
 
virtual std::vector< RFieldValueSplitValue (const RFieldValue &value) const
 Creates the list of direct child values given a value for this field.
 

Static Public Member Functions

static RResult< std::unique_ptr< RFieldBase > > Create (const std::string &fieldName, const std::string &typeName)
 Factory method to resurrect a field from the stored on-disk type information.
 
static RResult< void > EnsureValidFieldName (std::string_view fieldName)
 Check whether a given string is a valid field name.
 

Static Public Attributes

static constexpr int kTraitMappable = 0x04
 A field of a fundamental type that can be directly mapped via RField<T>::Map(), i.e.
 
static constexpr int kTraitTriviallyConstructible = 0x01
 No constructor needs to be called, i.e.
 
static constexpr int kTraitTriviallyDestructible = 0x02
 The type is cleaned up just by freeing its memory. I.e. DestroyValue() is a no-op.
 
static constexpr int kTraitTrivialType = kTraitTriviallyConstructible | kTraitTriviallyDestructible
 Shorthand for types that are both trivially constructible and destructible.
 

Protected Member Functions

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 modify the value object.
 
virtual std::size_t AppendImpl (const RFieldValue &value)
 Operations on values of complex types, e.g.
 
virtual std::unique_ptr< RFieldBaseCloneImpl (std::string_view newName) const =0
 Called by Clone(), which additionally copies the on-disk ID.
 
ROOT::Experimental::EColumnType EnsureColumnType (const std::vector< EColumnType > &requestedTypes, unsigned int columnIndex, const RNTupleDescriptor &desc)
 Throws an exception if the column given by fOnDiskId and the columnIndex in the provided descriptor is not of one of the requested types.
 
virtual void GenerateColumnsImpl ()=0
 Creates the backing columns corresponsing to the field type for writing.
 
virtual void GenerateColumnsImpl (const RNTupleDescriptor &desc)=0
 Creates the backing columns corresponsing to the field type for reading.
 
virtual void ReadGlobalImpl (NTupleSize_t globalIndex, RFieldValue *value)
 
virtual void ReadInClusterImpl (const RClusterIndex &clusterIndex, RFieldValue *value)
 
void RemoveReadCallback (size_t idx)
 

Protected Attributes

std::vector< std::unique_ptr< RColumn > > fColumns
 The columns are connected either to a sink or to a source (not to both); they are owned by the field.
 
RFieldBasefParent
 Sub fields point to their mother field.
 
RColumnfPrincipalColumn
 Points into fColumns.
 
std::vector< ReadCallback_tfReadCallbacks
 List of functions to be called after reading a value.
 
std::vector< std::unique_ptr< RFieldBase > > fSubFields
 Collections and classes own sub fields.
 
int fTraits = 0
 Properties of the type that allow for optimizations of collections of that type.
 

Private Types

using ReadCallback_t = std::function< void(RFieldValue &)>
 

Private Member Functions

void InvokeReadCallbacks (RFieldValue &value)
 

Private Attributes

std::string fDescription
 Free text set by the user.
 
bool fIsSimple
 A field qualifies as simple if it is both mappable and has no post-read callback.
 
std::string fName
 The field name relative to its parent field.
 
std::size_t fNRepetitions
 For fixed sized arrays, the array length.
 
DescriptorId_t fOnDiskId = kInvalidDescriptorId
 When the columns are connected to a page source or page sink, the field represents a field id in the corresponding RNTuple descriptor.
 
ENTupleStructure fStructure
 The role of this field in the data model structure.
 
std::string fType
 The C++ type captured by this field.
 

Friends

struct ROOT::Experimental::Internal::RFieldCallbackInjector
 
class ROOT::Experimental::RCollectionField
 

#include <ROOT/RField.hxx>

Inheritance diagram for ROOT::Experimental::Detail::RFieldBase:
[legend]

Member Typedef Documentation

◆ ReadCallback_t

Definition at line 80 of file RField.hxx.

Constructor & Destructor Documentation

◆ RFieldBase() [1/3]

ROOT::Experimental::Detail::RFieldBase::RFieldBase ( std::string_view  name,
std::string_view  type,
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.

If isSimple is true, the trait kTraitMappable is automatically set on construction. However, the field might be demoted to non-simple if a post-read callback is set.

Definition at line 181 of file RField.cxx.

◆ RFieldBase() [2/3]

ROOT::Experimental::Detail::RFieldBase::RFieldBase ( const RFieldBase )
delete

◆ RFieldBase() [3/3]

ROOT::Experimental::Detail::RFieldBase::RFieldBase ( RFieldBase &&  )
default

◆ ~RFieldBase()

ROOT::Experimental::Detail::RFieldBase::~RFieldBase ( )
virtual

Definition at line 188 of file RField.cxx.

Member Function Documentation

◆ AcceptVisitor()

◆ AddReadCallback()

size_t ROOT::Experimental::Detail::RFieldBase::AddReadCallback ( ReadCallback_t  func)
protected

Set a user-defined function to be called after reading a value, giving a chance to inspect and/or modify the value object.

Returns an index that can be used to remove the callback.

Definition at line 407 of file RField.cxx.

◆ Append()

std::size_t ROOT::Experimental::Detail::RFieldBase::Append ( const RFieldValue value)
inline

Write the given value into columns.

The value object has to be of the same type as the field. Returns the number of uncompressed bytes written.

Definition at line 241 of file RField.hxx.

◆ AppendImpl()

std::size_t ROOT::Experimental::Detail::RFieldBase::AppendImpl ( const RFieldValue value)
protectedvirtual

◆ Attach()

void ROOT::Experimental::Detail::RFieldBase::Attach ( std::unique_ptr< Detail::RFieldBase child)

Add a new subfield to the list of nested fields.

Definition at line 349 of file RField.cxx.

◆ begin()

ROOT::Experimental::Detail::RFieldBase::RSchemaIterator ROOT::Experimental::Detail::RFieldBase::begin ( )

Definition at line 451 of file RField.cxx.

◆ CaptureValue()

◆ Clone()

std::unique_ptr< ROOT::Experimental::Detail::RFieldBase > ROOT::Experimental::Detail::RFieldBase::Clone ( std::string_view  newName) const

Copies the field and its sub fields using a possibly new name and a new, unconnected set of columns.

Definition at line 309 of file RField.cxx.

◆ CloneImpl()

◆ CommitCluster()

virtual void ROOT::Experimental::Detail::RFieldBase::CommitCluster ( )
inlinevirtual

Perform housekeeping tasks for global to cluster-local index translation.

Reimplemented in ROOT::Experimental::RCollectionClassField, ROOT::Experimental::RVectorField, ROOT::Experimental::RRVecField, ROOT::Experimental::RVariantField, and ROOT::Experimental::RCollectionField.

Definition at line 280 of file RField.hxx.

◆ ConnectPageSink()

void ROOT::Experimental::Detail::RFieldBase::ConnectPageSink ( RPageSink pageSink)

Fields and their columns live in the void until connected to a physical page storage.

Only once connected, data can be read or written. In order to find the field in the page storage, the field's on-disk ID has to be set.

Definition at line 420 of file RField.cxx.

◆ ConnectPageSource()

void ROOT::Experimental::Detail::RFieldBase::ConnectPageSource ( RPageSource pageSource)

Definition at line 431 of file RField.cxx.

◆ Create()

ROOT::Experimental::RResult< std::unique_ptr< ROOT::Experimental::Detail::RFieldBase > > ROOT::Experimental::Detail::RFieldBase::Create ( const std::string &  fieldName,
const std::string &  typeName 
)
static

Factory method to resurrect a field from the stored on-disk type information.

Definition at line 193 of file RField.cxx.

◆ DestroyValue()

void ROOT::Experimental::Detail::RFieldBase::DestroyValue ( const RFieldValue value,
bool  dtorOnly = false 
)
virtual

◆ end()

ROOT::Experimental::Detail::RFieldBase::RSchemaIterator ROOT::Experimental::Detail::RFieldBase::end ( )

Definition at line 458 of file RField.cxx.

◆ EnsureColumnType()

ROOT::Experimental::EColumnType ROOT::Experimental::Detail::RFieldBase::EnsureColumnType ( const std::vector< EColumnType > &  requestedTypes,
unsigned int  columnIndex,
const RNTupleDescriptor desc 
)
protected

Throws an exception if the column given by fOnDiskId and the columnIndex in the provided descriptor is not of one of the requested types.

Definition at line 375 of file RField.cxx.

◆ EnsureValidFieldName()

ROOT::Experimental::RResult< void > ROOT::Experimental::Detail::RFieldBase::EnsureValidFieldName ( std::string_view  fieldName)
static

Check whether a given string is a valid field name.

Definition at line 298 of file RField.cxx.

◆ Flush()

void ROOT::Experimental::Detail::RFieldBase::Flush ( ) const

Ensure that all received items are written from page buffers to the storage.

Definition at line 367 of file RField.cxx.

◆ GenerateColumnsImpl() [1/2]

◆ GenerateColumnsImpl() [2/2]

◆ GenerateValue() [1/2]

ROOT::Experimental::Detail::RFieldValue ROOT::Experimental::Detail::RFieldBase::GenerateValue ( )

Generates an object of the field type and allocates new initialized memory according to the type.

Definition at line 330 of file RField.cxx.

◆ GenerateValue() [2/2]

◆ GetAlignment()

virtual size_t ROOT::Experimental::Detail::RFieldBase::GetAlignment ( ) const
inlinevirtual

◆ GetDescription()

std::string ROOT::Experimental::Detail::RFieldBase::GetDescription ( ) const
inline

Get the field's description.

Definition at line 294 of file RField.hxx.

◆ GetFieldVersion()

virtual std::uint32_t ROOT::Experimental::Detail::RFieldBase::GetFieldVersion ( ) const
inlinevirtual

Indicates an evolution of the mapping scheme from C++ type to columns.

Definition at line 306 of file RField.hxx.

◆ GetName()

std::string ROOT::Experimental::Detail::RFieldBase::GetName ( ) const
inline

Definition at line 285 of file RField.hxx.

◆ GetNElements()

NTupleSize_t ROOT::Experimental::Detail::RFieldBase::GetNElements ( ) const
inline

Definition at line 289 of file RField.hxx.

◆ GetNRepetitions()

std::size_t ROOT::Experimental::Detail::RFieldBase::GetNRepetitions ( ) const
inline

Definition at line 288 of file RField.hxx.

◆ GetOnDiskId()

DescriptorId_t ROOT::Experimental::Detail::RFieldBase::GetOnDiskId ( ) const
inline

Definition at line 297 of file RField.hxx.

◆ GetParent()

RFieldBase * ROOT::Experimental::Detail::RFieldBase::GetParent ( ) const
inline

Definition at line 290 of file RField.hxx.

◆ GetStructure()

ENTupleStructure ROOT::Experimental::Detail::RFieldBase::GetStructure ( ) const
inline

Definition at line 287 of file RField.hxx.

◆ GetSubFields()

std::vector< ROOT::Experimental::Detail::RFieldBase * > ROOT::Experimental::Detail::RFieldBase::GetSubFields ( ) const

Definition at line 357 of file RField.cxx.

◆ GetTraits()

int ROOT::Experimental::Detail::RFieldBase::GetTraits ( ) const
inline

Definition at line 236 of file RField.hxx.

◆ GetType()

std::string ROOT::Experimental::Detail::RFieldBase::GetType ( ) const
inline

Definition at line 286 of file RField.hxx.

◆ GetTypeVersion()

virtual std::uint32_t ROOT::Experimental::Detail::RFieldBase::GetTypeVersion ( ) const
inlinevirtual

Indicates an evolution of the C++ type itself.

Definition at line 308 of file RField.hxx.

◆ GetValueSize()

◆ HasReadCallbacks()

bool ROOT::Experimental::Detail::RFieldBase::HasReadCallbacks ( ) const
inline

Definition at line 237 of file RField.hxx.

◆ InvokeReadCallbacks()

void ROOT::Experimental::Detail::RFieldBase::InvokeReadCallbacks ( RFieldValue value)
inlineprivate

Definition at line 158 of file RField.hxx.

◆ IsSimple()

bool ROOT::Experimental::Detail::RFieldBase::IsSimple ( ) const
inline

Definition at line 292 of file RField.hxx.

◆ operator=() [1/2]

RFieldBase & ROOT::Experimental::Detail::RFieldBase::operator= ( const RFieldBase )
delete

◆ operator=() [2/2]

RFieldBase & ROOT::Experimental::Detail::RFieldBase::operator= ( RFieldBase &&  )
default

◆ Read() [1/2]

void ROOT::Experimental::Detail::RFieldBase::Read ( const RClusterIndex clusterIndex,
RFieldValue value 
)
inline

Definition at line 265 of file RField.hxx.

◆ Read() [2/2]

void ROOT::Experimental::Detail::RFieldBase::Read ( NTupleSize_t  globalIndex,
RFieldValue value 
)
inline

Populate a single value with data from the tree, which needs to be of the fitting type.

Reading copies data into the memory wrapped by the ntuple value. The fast path is conditioned by the field qualifying as simple, i.e. maps as-is to a single column and has no read callback.

Definition at line 253 of file RField.hxx.

◆ ReadGlobalImpl()

◆ ReadInClusterImpl()

virtual void ROOT::Experimental::Detail::RFieldBase::ReadInClusterImpl ( const RClusterIndex clusterIndex,
RFieldValue value 
)
inlineprotectedvirtual

◆ RemoveReadCallback()

void ROOT::Experimental::Detail::RFieldBase::RemoveReadCallback ( size_t  idx)
protected

Definition at line 414 of file RField.cxx.

◆ SetDescription()

void ROOT::Experimental::Detail::RFieldBase::SetDescription ( std::string_view  description)
inline

Definition at line 295 of file RField.hxx.

◆ SetOnDiskId()

void ROOT::Experimental::Detail::RFieldBase::SetOnDiskId ( DescriptorId_t  id)
inline

Definition at line 298 of file RField.hxx.

◆ SplitValue()

std::vector< ROOT::Experimental::Detail::RFieldValue > ROOT::Experimental::Detail::RFieldBase::SplitValue ( const RFieldValue value) const
virtual

Creates the list of direct child values given a value for this field.

E.g. a single value for the correct variant or all the elements of a collection. The default implementation assumes no sub values and returns an empty vector.

Reimplemented in ROOT::Experimental::RClassField, ROOT::Experimental::RCollectionClassField, ROOT::Experimental::RRecordField, ROOT::Experimental::RVectorField, ROOT::Experimental::RRVecField, and ROOT::Experimental::RArrayField.

Definition at line 344 of file RField.cxx.

Friends And Related Symbol Documentation

◆ ROOT::Experimental::Internal::RFieldCallbackInjector

friend struct ROOT::Experimental::Internal::RFieldCallbackInjector
friend

Definition at line 79 of file RField.hxx.

◆ ROOT::Experimental::RCollectionField

Definition at line 78 of file RField.hxx.

Member Data Documentation

◆ fColumns

std::vector<std::unique_ptr<RColumn> > ROOT::Experimental::Detail::RFieldBase::fColumns
protected

The columns are connected either to a sink or to a source (not to both); they are owned by the field.

Definition at line 122 of file RField.hxx.

◆ fDescription

std::string ROOT::Experimental::Detail::RFieldBase::fDescription
private

Free text set by the user.

Definition at line 110 of file RField.hxx.

◆ fIsSimple

bool ROOT::Experimental::Detail::RFieldBase::fIsSimple
private

A field qualifies as simple if it is both mappable and has no post-read callback.

Definition at line 104 of file RField.hxx.

◆ fName

std::string ROOT::Experimental::Detail::RFieldBase::fName
private

The field name relative to its parent field.

Definition at line 96 of file RField.hxx.

◆ fNRepetitions

std::size_t ROOT::Experimental::Detail::RFieldBase::fNRepetitions
private

For fixed sized arrays, the array length.

Definition at line 102 of file RField.hxx.

◆ fOnDiskId

DescriptorId_t ROOT::Experimental::Detail::RFieldBase::fOnDiskId = kInvalidDescriptorId
private

When the columns are connected to a page source or page sink, the field represents a field id in the corresponding RNTuple descriptor.

This on-disk ID is set in RPageSink::Create() for writing and by RFieldDescriptor::CreateField() when recreating a field / model from the stored descriptor.

Definition at line 108 of file RField.hxx.

◆ fParent

RFieldBase* ROOT::Experimental::Detail::RFieldBase::fParent
protected

Sub fields point to their mother field.

Definition at line 116 of file RField.hxx.

◆ fPrincipalColumn

RColumn* ROOT::Experimental::Detail::RFieldBase::fPrincipalColumn
protected

Points into fColumns.

All fields that have columns have a distinct main column. For simple fields (float, int, ...), the principal column corresponds to the field type. For collection fields expect std::array, the main column is the offset field. Class fields have no column of their own.

Definition at line 120 of file RField.hxx.

◆ fReadCallbacks

std::vector<ReadCallback_t> ROOT::Experimental::Detail::RFieldBase::fReadCallbacks
protected

List of functions to be called after reading a value.

Definition at line 126 of file RField.hxx.

◆ fStructure

ENTupleStructure ROOT::Experimental::Detail::RFieldBase::fStructure
private

The role of this field in the data model structure.

Definition at line 100 of file RField.hxx.

◆ fSubFields

std::vector<std::unique_ptr<RFieldBase> > ROOT::Experimental::Detail::RFieldBase::fSubFields
protected

Collections and classes own sub fields.

Definition at line 114 of file RField.hxx.

◆ fTraits

int ROOT::Experimental::Detail::RFieldBase::fTraits = 0
protected

Properties of the type that allow for optimizations of collections of that type.

Definition at line 124 of file RField.hxx.

◆ fType

std::string ROOT::Experimental::Detail::RFieldBase::fType
private

The C++ type captured by this field.

Definition at line 98 of file RField.hxx.

◆ kTraitMappable

constexpr int ROOT::Experimental::Detail::RFieldBase::kTraitMappable = 0x04
staticconstexpr

A field of a fundamental type that can be directly mapped via RField<T>::Map(), i.e.

maps as-is to a single column

Definition at line 90 of file RField.hxx.

◆ kTraitTriviallyConstructible

constexpr int ROOT::Experimental::Detail::RFieldBase::kTraitTriviallyConstructible = 0x01
staticconstexpr

No constructor needs to be called, i.e.

any bit pattern in the allocated memory represents a valid type A trivially constructible field has a no-op GenerateValue() implementation

Definition at line 85 of file RField.hxx.

◆ kTraitTriviallyDestructible

constexpr int ROOT::Experimental::Detail::RFieldBase::kTraitTriviallyDestructible = 0x02
staticconstexpr

The type is cleaned up just by freeing its memory. I.e. DestroyValue() is a no-op.

Definition at line 87 of file RField.hxx.

◆ kTraitTrivialType

constexpr int ROOT::Experimental::Detail::RFieldBase::kTraitTrivialType = kTraitTriviallyConstructible | kTraitTriviallyDestructible
staticconstexpr

Shorthand for types that are both trivially constructible and destructible.

Definition at line 92 of file RField.hxx.

Libraries for ROOT::Experimental::Detail::RFieldBase:

The documentation for this class was generated from the following files: