Logo ROOT   6.18/05
Reference Guide
List of all members | Classes | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Private Attributes | Friends | List of all members
ROOT::Experimental::Detail::RFieldBase Class Referenceabstract

Definition at line 67 of file RField.hxx.

Classes

class  RIterator
 Iterates over the sub 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)
 The constructor creates the underlying column objects and connects them to either a sink or a source. More...
 
virtual ~RFieldBase ()
 
void Append (const RFieldValue &value)
 Write the given value into columns. The value object has to be of the same type as the field. More...
 
void Attach (std::unique_ptr< Detail::RFieldBase > child)
 
RIterator begin ()
 
virtual RFieldValue CaptureValue (void *where)=0
 Creates a value from a memory location with an already constructed object. More...
 
virtual RFieldBaseClone (std::string_view newName)=0
 
virtual void CommitCluster ()
 Perform housekeeping tasks for global to cluster-local index translation. More...
 
void ConnectColumns (Detail::RPageStorage *pageStorage)
 Registeres (or re-registers) the backing columns with the physical storage. More...
 
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. More...
 
RIterator end ()
 
void Flush () const
 Ensure that all received items are written from page buffers to the storage. More...
 
RFieldValue GenerateValue ()
 Generates a tree value of the field type and allocates new initialized memory according to the type. More...
 
virtual RFieldValue GenerateValue (void *where)=0
 Generates a tree value in a given location of size at least GetValueSize(). More...
 
virtual RNTupleVersion GetFieldVersion () const
 Indicates an evolution of the mapping scheme from C++ type to columns. More...
 
std::string GetName () const
 
virtual unsigned int GetNColumns () const =0
 Returns the number of columns generated to store data for the field; defaults to 1. More...
 
NTupleSize_t GetNItems ()
 The number of elements in the principal column. For top level fields, the number of entries. More...
 
const RFieldBaseGetParent () const
 
ENTupleStructure GetStructure () const
 
std::string GetType () const
 
virtual RNTupleVersion GetTypeVersion () const
 Indicates an evolution of the C++ type itself. More...
 
virtual size_t GetValueSize () const =0
 The number of bytes taken by a value of the appropriate type. More...
 
bool IsSimple () const
 
RFieldBaseoperator= (const RFieldBase &)=delete
 
RFieldBaseoperator= (RFieldBase &&)=default
 
void Read (NTupleSize_t index, RFieldValue *value)
 Populate a single value with data from the tree, which needs to be of the fitting type. More...
 
void ReadV (NTupleSize_t index, NTupleSize_t count, void *dst)
 Type unsafe bulk read interface; dst must point to a vector of objects of the field type. More...
 

Static Public Member Functions

static RFieldBaseCreate (const std::string &fieldName, const std::string &typeName)
 Factory method to resurrect a field from the stored on-disk type information. More...
 
static std::string GetCollectionName (const std::string &parentName)
 Get the name for an item sub field that is part of a collection, e.g. the float field of std::vector<float> More...
 
static std::string GetLeafName (const std::string &fullName)
 Get the tail of the field name up to the last dot. More...
 

Static Public Attributes

static constexpr char kCollectionSeparator = '/'
 Field names convey the level of subfields; sub fields (nested collections) are separated by a dot. More...
 

Protected Member Functions

virtual void DoAppend (const RFieldValue &value)
 Operations on values of complex types, e.g. More...
 
virtual void DoGenerateColumns ()=0
 Creates the backing columns corresponsing to the field type and name. More...
 
virtual void DoRead (NTupleSize_t index, RFieldValue *value)
 
virtual void DoReadV (NTupleSize_t index, NTupleSize_t count, void *dst)
 

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. More...
 
RFieldBasefParent
 Sub fields point to their mother field. More...
 
RColumnfPrincipalColumn
 All fields have a main column. For collection fields, the main column is the index field. Points into fColumns. More...
 
std::vector< std::unique_ptr< RFieldBase > > fSubFields
 Collections and classes own sub fields. More...
 

Private Attributes

bool fIsSimple
 A field on a trivial type that maps as-is to a single column. More...
 
std::string fName
 The field name is a unique within a tree and also the basis for the column name(s) More...
 
ENTupleStructure fStructure
 The role of this field in the data model structure. More...
 
std::string fType
 The C++ type captured by this field. More...
 

Friends

class ROOT::Experimental::RFieldCollection
 

#include <ROOT/RField.hxx>

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

Constructor & Destructor Documentation

◆ RFieldBase() [1/3]

ROOT::Experimental::Detail::RFieldBase::RFieldBase ( std::string_view  name,
std::string_view  type,
ENTupleStructure  structure,
bool  isSimple 
)

The constructor creates the underlying column objects and connects them to either a sink or a source.

Definition at line 37 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 43 of file RField.cxx.

Member Function Documentation

◆ Append()

void 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.

Definition at line 167 of file RField.hxx.

◆ Attach()

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

Definition at line 124 of file RField.cxx.

◆ begin()

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

Definition at line 162 of file RField.cxx.

◆ CaptureValue()

virtual RFieldValue ROOT::Experimental::Detail::RFieldBase::CaptureValue ( void where)
pure virtual

◆ Clone()

virtual RFieldBase * ROOT::Experimental::Detail::RFieldBase::Clone ( std::string_view  newName)
pure virtual

◆ CommitCluster()

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

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

Reimplemented in ROOT::Experimental::RFieldVector, ROOT::Experimental::RFieldCollection, and ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >.

Definition at line 203 of file RField.hxx.

◆ ConnectColumns()

void ROOT::Experimental::Detail::RFieldBase::ConnectColumns ( Detail::RPageStorage pageStorage)

Registeres (or re-registers) the backing columns with the physical storage.

Definition at line 152 of file RField.cxx.

◆ Create()

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 48 of file RField.cxx.

◆ DestroyValue()

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

Releases the resources acquired during GenerateValue (memory and constructor) This implementation works for simple types but needs to be overwritten for complex ones.

Reimplemented in ROOT::Experimental::RFieldClass, ROOT::Experimental::RFieldVector, and ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >.

Definition at line 118 of file RField.cxx.

◆ DoAppend()

void ROOT::Experimental::Detail::RFieldBase::DoAppend ( const RFieldValue value)
protectedvirtual

Operations on values of complex types, e.g.

ones that involve multiple columns or for which no direct column type exists.

Reimplemented in ROOT::Experimental::RFieldClass, ROOT::Experimental::RFieldVector, and ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >.

Definition at line 92 of file RField.cxx.

◆ DoGenerateColumns()

virtual void ROOT::Experimental::Detail::RFieldBase::DoGenerateColumns ( )
protectedpure virtual

◆ DoRead()

void ROOT::Experimental::Detail::RFieldBase::DoRead ( NTupleSize_t  index,
RFieldValue value 
)
protectedvirtual

◆ DoReadV()

void ROOT::Experimental::Detail::RFieldBase::DoReadV ( NTupleSize_t  index,
NTupleSize_t  count,
void dst 
)
protectedvirtual

Definition at line 103 of file RField.cxx.

◆ end()

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

Definition at line 168 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 145 of file RField.cxx.

◆ GenerateValue() [1/2]

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

Generates a tree value of the field type and allocates new initialized memory according to the type.

Definition at line 111 of file RField.cxx.

◆ GenerateValue() [2/2]

virtual RFieldValue ROOT::Experimental::Detail::RFieldBase::GenerateValue ( void where)
pure virtual

◆ GetCollectionName()

std::string ROOT::Experimental::Detail::RFieldBase::GetCollectionName ( const std::string &  parentName)
static

Get the name for an item sub field that is part of a collection, e.g. the float field of std::vector<float>

Definition at line 137 of file RField.cxx.

◆ GetFieldVersion()

virtual RNTupleVersion ROOT::Experimental::Detail::RFieldBase::GetFieldVersion ( ) const
inlinevirtual

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

Definition at line 214 of file RField.hxx.

◆ GetLeafName()

std::string ROOT::Experimental::Detail::RFieldBase::GetLeafName ( const std::string &  fullName)
static

Get the tail of the field name up to the last dot.

Definition at line 131 of file RField.cxx.

◆ GetName()

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

Definition at line 207 of file RField.hxx.

◆ GetNColumns()

virtual unsigned int ROOT::Experimental::Detail::RFieldBase::GetNColumns ( ) const
pure virtual

◆ GetNItems()

NTupleSize_t ROOT::Experimental::Detail::RFieldBase::GetNItems ( )

The number of elements in the principal column. For top level fields, the number of entries.

◆ GetParent()

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

Definition at line 210 of file RField.hxx.

◆ GetStructure()

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

Definition at line 209 of file RField.hxx.

◆ GetType()

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

Definition at line 208 of file RField.hxx.

◆ GetTypeVersion()

virtual RNTupleVersion ROOT::Experimental::Detail::RFieldBase::GetTypeVersion ( ) const
inlinevirtual

Indicates an evolution of the C++ type itself.

Definition at line 216 of file RField.hxx.

◆ GetValueSize()

virtual size_t ROOT::Experimental::Detail::RFieldBase::GetValueSize ( ) const
pure virtual

◆ IsSimple()

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

Definition at line 211 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()

void ROOT::Experimental::Detail::RFieldBase::Read ( NTupleSize_t  index,
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 tree value.

Definition at line 178 of file RField.hxx.

◆ ReadV()

void ROOT::Experimental::Detail::RFieldBase::ReadV ( NTupleSize_t  index,
NTupleSize_t  count,
void dst 
)
inline

Type unsafe bulk read interface; dst must point to a vector of objects of the field type.

TODO(jblomer): can this be type safe?

Definition at line 188 of file RField.hxx.

Friends And Related Function Documentation

◆ ROOT::Experimental::RFieldCollection

Definition at line 68 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 87 of file RField.hxx.

◆ fIsSimple

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

A field on a trivial type that maps as-is to a single column.

Definition at line 77 of file RField.hxx.

◆ fName

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

The field name is a unique within a tree and also the basis for the column name(s)

Definition at line 71 of file RField.hxx.

◆ fParent

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

Sub fields point to their mother field.

Definition at line 83 of file RField.hxx.

◆ fPrincipalColumn

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

All fields have a main column. For collection fields, the main column is the index field. Points into fColumns.

Definition at line 85 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 75 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 81 of file RField.hxx.

◆ fType

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

The C++ type captured by this field.

Definition at line 73 of file RField.hxx.

◆ kCollectionSeparator

constexpr char ROOT::Experimental::Detail::RFieldBase::kCollectionSeparator = '/'
staticconstexpr

Field names convey the level of subfields; sub fields (nested collections) are separated by a dot.

Definition at line 100 of file RField.hxx.

Libraries for ROOT::Experimental::Detail::RFieldBase:
[legend]

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