Definition at line 72 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< 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. | |
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 RNTupleVersion | 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 |
RFieldBase * | GetParent () const |
ENTupleStructure | GetStructure () const |
std::vector< RFieldBase * > | GetSubFields () const |
std::string | GetType () const |
virtual RNTupleVersion | 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 | IsSimple () const |
RFieldBase & | operator= (const RFieldBase &)=delete |
RFieldBase & | operator= (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< RFieldValue > | SplitValue (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. | |
Protected Member Functions | |
virtual std::size_t | AppendImpl (const RFieldValue &value) |
Operations on values of complex types, e.g. | |
virtual std::unique_ptr< RFieldBase > | CloneImpl (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) |
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. | |
RFieldBase * | fParent |
Sub fields point to their mother field. | |
RColumn * | fPrincipalColumn |
Points into fColumns. | |
std::vector< std::unique_ptr< RFieldBase > > | fSubFields |
Collections and classes own sub fields. | |
Private Attributes | |
std::string | fDescription |
Free text set by the user. | |
bool | fIsSimple |
A field on a trivial type that maps as-is to a single column. | |
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 | |
class | ROOT::Experimental::RCollectionField |
#include <ROOT/RField.hxx>
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.
Definition at line 137 of file RField.cxx.
|
delete |
|
default |
|
virtual |
Definition at line 144 of file RField.cxx.
|
virtual |
Reimplemented in ROOT::Experimental::RFieldZero, ROOT::Experimental::RRecordField, ROOT::Experimental::RVectorField, ROOT::Experimental::RArrayField, ROOT::Experimental::RField< ClusterSize_t >, ROOT::Experimental::RField< bool >, ROOT::Experimental::RField< float >, ROOT::Experimental::RField< double >, ROOT::Experimental::RField< char >, and ROOT::Experimental::RClassField.
Definition at line 364 of file RField.cxx.
|
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 201 of file RField.hxx.
|
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::RClassField, ROOT::Experimental::RRecordField, ROOT::Experimental::RVectorField, ROOT::Experimental::RArrayField, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, and ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >.
Definition at line 251 of file RField.cxx.
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 283 of file RField.cxx.
ROOT::Experimental::Detail::RFieldBase::RSchemaIterator ROOT::Experimental::Detail::RFieldBase::begin | ( | ) |
Definition at line 370 of file RField.cxx.
|
pure virtual |
Creates a value from a memory location with an already constructed object.
Implemented in ROOT::Experimental::RFieldZero, ROOT::Experimental::Internal::RRDFCardinalityField, ROOT::Experimental::RClassField, ROOT::Experimental::RRecordField, ROOT::Experimental::RArrayField, ROOT::Experimental::RCollectionField, ROOT::Experimental::RField< ClusterSize_t >, ROOT::Experimental::RField< bool >, ROOT::Experimental::RField< float >, ROOT::Experimental::RField< double >, ROOT::Experimental::RField< char >, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >, and ROOT::Experimental::RVectorField.
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 243 of file RField.cxx.
|
protectedpure virtual |
Called by Clone(), which additionally copies the on-disk ID.
Implemented in ROOT::Experimental::RFieldZero, ROOT::Experimental::RClassField, ROOT::Experimental::RRecordField, ROOT::Experimental::RVectorField, ROOT::Experimental::RArrayField, ROOT::Experimental::RCollectionField, ROOT::Experimental::RField< ClusterSize_t >, ROOT::Experimental::RField< bool >, ROOT::Experimental::RField< float >, ROOT::Experimental::RField< double >, ROOT::Experimental::RField< char >, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >, and ROOT::Experimental::Internal::RRDFCardinalityField.
|
inlinevirtual |
Perform housekeeping tasks for global to cluster-local index translation.
Reimplemented in ROOT::Experimental::RVectorField, ROOT::Experimental::RCollectionField, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, and ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >.
Definition at line 230 of file RField.hxx.
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 342 of file RField.cxx.
void ROOT::Experimental::Detail::RFieldBase::ConnectPageSource | ( | RPageSource & | pageSource | ) |
Definition at line 353 of file RField.cxx.
|
static |
Factory method to resurrect a field from the stored on-disk type information.
Definition at line 149 of file RField.cxx.
|
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::RClassField, ROOT::Experimental::RRecordField, ROOT::Experimental::RVectorField, ROOT::Experimental::RArrayField, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, and ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >.
Definition at line 271 of file RField.cxx.
ROOT::Experimental::Detail::RFieldBase::RSchemaIterator ROOT::Experimental::Detail::RFieldBase::end | ( | ) |
Definition at line 377 of file RField.cxx.
|
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 309 of file RField.cxx.
|
static |
Check whether a given string is a valid field name.
Definition at line 232 of file RField.cxx.
void ROOT::Experimental::Detail::RFieldBase::Flush | ( | ) | const |
Ensure that all received items are written from page buffers to the storage.
Definition at line 301 of file RField.cxx.
|
protectedpure virtual |
Creates the backing columns corresponsing to the field type for writing.
Implemented in ROOT::Experimental::Internal::RRDFCardinalityField, ROOT::Experimental::RFieldZero, ROOT::Experimental::RClassField, ROOT::Experimental::RRecordField, ROOT::Experimental::RVectorField, ROOT::Experimental::RArrayField, ROOT::Experimental::RCollectionField, ROOT::Experimental::RField< ClusterSize_t >, ROOT::Experimental::RField< bool >, ROOT::Experimental::RField< float >, ROOT::Experimental::RField< double >, ROOT::Experimental::RField< char >, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, and ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >.
|
protectedpure virtual |
Creates the backing columns corresponsing to the field type for reading.
The method should to check, using the page source and fOnDiskId, if the column types match and throw if they don't.
Implemented in ROOT::Experimental::Internal::RRDFCardinalityField, ROOT::Experimental::RFieldZero, ROOT::Experimental::RRecordField, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >, ROOT::Experimental::RClassField, ROOT::Experimental::RVectorField, ROOT::Experimental::RArrayField, ROOT::Experimental::RCollectionField, ROOT::Experimental::RField< ClusterSize_t >, ROOT::Experimental::RField< bool >, ROOT::Experimental::RField< float >, ROOT::Experimental::RField< double >, and ROOT::Experimental::RField< char >.
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 264 of file RField.cxx.
|
pure virtual |
Generates a tree value in a given location of size at least GetValueSize().
Assumes that where has been allocated by malloc().
Implemented in ROOT::Experimental::RFieldZero, ROOT::Experimental::Internal::RRDFCardinalityField, ROOT::Experimental::RRecordField, ROOT::Experimental::RField< T, typename >, ROOT::Experimental::RCollectionField, ROOT::Experimental::RField< ClusterSize_t >, ROOT::Experimental::RField< bool >, ROOT::Experimental::RField< float >, ROOT::Experimental::RField< double >, ROOT::Experimental::RField< char >, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >, ROOT::Experimental::RClassField, ROOT::Experimental::RVectorField, and ROOT::Experimental::RArrayField.
|
inlinevirtual |
For many types, the alignment requirement is equal to the size; otherwise override.
Reimplemented in ROOT::Experimental::RClassField, ROOT::Experimental::RRecordField, ROOT::Experimental::RVectorField, ROOT::Experimental::RArrayField, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, and ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >.
Definition at line 197 of file RField.hxx.
|
inline |
Get the field's description.
Definition at line 244 of file RField.hxx.
|
inlinevirtual |
Indicates an evolution of the mapping scheme from C++ type to columns.
Definition at line 256 of file RField.hxx.
|
inline |
Definition at line 235 of file RField.hxx.
|
inline |
Definition at line 239 of file RField.hxx.
|
inline |
Definition at line 238 of file RField.hxx.
|
inline |
Definition at line 247 of file RField.hxx.
|
inline |
Definition at line 240 of file RField.hxx.
|
inline |
Definition at line 237 of file RField.hxx.
std::vector< ROOT::Experimental::Detail::RFieldBase * > ROOT::Experimental::Detail::RFieldBase::GetSubFields | ( | ) | const |
Definition at line 291 of file RField.cxx.
|
inline |
Definition at line 236 of file RField.hxx.
|
inlinevirtual |
Indicates an evolution of the C++ type itself.
Definition at line 258 of file RField.hxx.
|
pure virtual |
The number of bytes taken by a value of the appropriate type.
Implemented in ROOT::Experimental::Internal::RRDFCardinalityField, ROOT::Experimental::RFieldZero, ROOT::Experimental::RRecordField, ROOT::Experimental::RArrayField, ROOT::Experimental::RCollectionField, ROOT::Experimental::RField< ClusterSize_t >, ROOT::Experimental::RField< bool >, ROOT::Experimental::RField< float >, ROOT::Experimental::RField< double >, ROOT::Experimental::RField< char >, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >, ROOT::Experimental::RClassField, and ROOT::Experimental::RVectorField.
|
inline |
Definition at line 242 of file RField.hxx.
|
delete |
|
default |
|
inline |
Definition at line 219 of file RField.hxx.
|
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.
Definition at line 211 of file RField.hxx.
|
protectedvirtual |
Reimplemented in ROOT::Experimental::RClassField, ROOT::Experimental::RRecordField, ROOT::Experimental::RVectorField, ROOT::Experimental::RArrayField, ROOT::Experimental::RField< ROOT::VecOps::RVec< ItemT > >, ROOT::Experimental::RField< ROOT::VecOps::RVec< bool > >, and ROOT::Experimental::Internal::RRDFCardinalityField.
Definition at line 257 of file RField.cxx.
|
inlineprotectedvirtual |
Reimplemented in ROOT::Experimental::RClassField, ROOT::Experimental::RRecordField, ROOT::Experimental::RArrayField, and ROOT::Experimental::Internal::RRDFCardinalityField.
Definition at line 119 of file RField.hxx.
|
inline |
Definition at line 245 of file RField.hxx.
|
inline |
Definition at line 248 of file RField.hxx.
|
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::RRecordField, ROOT::Experimental::RVectorField, and ROOT::Experimental::RArrayField.
Definition at line 278 of file RField.cxx.
|
friend |
Definition at line 73 of file RField.hxx.
|
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 103 of file RField.hxx.
|
private |
Free text set by the user.
Definition at line 91 of file RField.hxx.
|
private |
A field on a trivial type that maps as-is to a single column.
Definition at line 85 of file RField.hxx.
|
private |
The field name relative to its parent field.
Definition at line 77 of file RField.hxx.
|
private |
For fixed sized arrays, the array length.
Definition at line 83 of file RField.hxx.
|
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 89 of file RField.hxx.
|
protected |
Sub fields point to their mother field.
Definition at line 97 of file RField.hxx.
|
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 101 of file RField.hxx.
|
private |
The role of this field in the data model structure.
Definition at line 81 of file RField.hxx.
|
protected |
Collections and classes own sub fields.
Definition at line 95 of file RField.hxx.
|
private |
The C++ type captured by this field.
Definition at line 79 of file RField.hxx.