Similar to RValue but manages an array of consecutive values.
Bulks have to come from the same cluster. Bulk I/O works with two bit masks: the mask of all the available entries in the current bulk and the mask of the required entries in a bulk read. The idea is that a single bulk may serve multiple read operations on the same range, where in each read operation a different subset of values is required. The memory of the value array is managed by the RBulk class.
Definition at line 691 of file RFieldBase.hxx.
Public Member Functions | |
RBulk (const RBulk &)=delete | |
RBulk (RBulk &&other) | |
~RBulk () | |
void | AdoptBuffer (void *buf, std::size_t capacity) |
RBulk & | operator= (const RBulk &)=delete |
RBulk & | operator= (RBulk &&other) |
void * | ReadBulk (RClusterIndex firstIndex, const bool *maskReq, std::size_t size) |
Reads 'size' values from the associated field, starting from 'firstIndex'. | |
void * | ReadBulk (RNTupleClusterRange range) |
Overload to read all elements in the given cluster range. | |
Private Member Functions | |
RBulk (RFieldBase *field) | |
bool | ContainsRange (RClusterIndex firstIndex, std::size_t size) const |
void | CountValidValues () |
void * | GetValuePtrAt (std::size_t idx) const |
void | ReleaseValues () |
void | Reset (RClusterIndex firstIndex, std::size_t size) |
Sets a new range for the bulk. | |
Private Attributes | |
std::vector< unsigned char > | fAuxData |
Reading arrays of complex values may require additional memory, for instance for the elements of arrays of vectors. | |
std::size_t | fCapacity = 0 |
The size of the array memory block in number of values. | |
std::unique_ptr< RFieldBase::RDeleter > | fDeleter |
RFieldBase * | fField = nullptr |
The field that created the array of values. | |
RClusterIndex | fFirstIndex |
Index of the first value of the array. | |
bool | fIsAdopted = false |
True if the user provides the memory buffer for fValues. | |
std::unique_ptr< bool[]> | fMaskAvail |
Masks invalid values in the array. | |
std::size_t | fNValidValues = 0 |
The sum of non-zero elements in the fMask. | |
std::size_t | fSize = 0 |
The number of available values in the array (provided their mask is set) | |
void * | fValues = nullptr |
Cached deleter of fField. | |
std::size_t | fValueSize = 0 |
Cached copy of fField->GetValueSize() | |
Friends | |
class | RFieldBase |
#include <ROOT/RFieldBase.hxx>
|
inlineexplicitprivate |
Definition at line 726 of file RFieldBase.hxx.
ROOT::Experimental::RFieldBase::RBulk::~RBulk | ( | ) |
Definition at line 157 of file RFieldBase.cxx.
|
delete |
ROOT::Experimental::RFieldBase::RBulk::RBulk | ( | RBulk && | other | ) |
Definition at line 128 of file RFieldBase.cxx.
void ROOT::Experimental::RFieldBase::RBulk::AdoptBuffer | ( | void * | buf, |
std::size_t | capacity | ||
) |
Definition at line 210 of file RFieldBase.cxx.
|
inlineprivate |
Definition at line 716 of file RFieldBase.hxx.
|
private |
Definition at line 203 of file RFieldBase.cxx.
|
inlineprivate |
Definition at line 724 of file RFieldBase.hxx.
ROOT::Experimental::RFieldBase::RBulk & ROOT::Experimental::RFieldBase::RBulk::operator= | ( | RBulk && | other | ) |
Definition at line 142 of file RFieldBase.cxx.
|
inline |
Reads 'size' values from the associated field, starting from 'firstIndex'.
Note that the index is given relative to a certain cluster. The return value points to the array of read objects. The 'maskReq' parameter is a bool array of at least 'size' elements. Only objects for which the mask is true are guaranteed to be read in the returned value array. A 'nullptr' means to read all elements.
Definition at line 745 of file RFieldBase.hxx.
|
inline |
Overload to read all elements in the given cluster range.
Definition at line 777 of file RFieldBase.hxx.
|
private |
Definition at line 163 of file RFieldBase.cxx.
|
private |
Sets a new range for the bulk.
If there is enough capacity, the fValues array will be reused. Otherwise a new array is allocated. After reset, fMaskAvail is false for all values.
Definition at line 177 of file RFieldBase.cxx.
|
friend |
Definition at line 693 of file RFieldBase.hxx.
|
private |
Reading arrays of complex values may require additional memory, for instance for the elements of arrays of vectors.
A pointer to the fAuxData array is passed to the field's BulkRead method. The RBulk class does not modify the array in-between calls to the field's BulkRead method.
Definition at line 708 of file RFieldBase.hxx.
|
private |
The size of the array memory block in number of values.
Definition at line 699 of file RFieldBase.hxx.
|
private |
Definition at line 696 of file RFieldBase.hxx.
|
private |
The field that created the array of values.
Definition at line 695 of file RFieldBase.hxx.
|
private |
Index of the first value of the array.
Definition at line 704 of file RFieldBase.hxx.
|
private |
True if the user provides the memory buffer for fValues.
Definition at line 701 of file RFieldBase.hxx.
|
private |
Masks invalid values in the array.
Definition at line 702 of file RFieldBase.hxx.
|
private |
The sum of non-zero elements in the fMask.
Definition at line 703 of file RFieldBase.hxx.
|
private |
The number of available values in the array (provided their mask is set)
Definition at line 700 of file RFieldBase.hxx.
|
private |
Cached deleter of fField.
Pointer to the start of the array
Definition at line 697 of file RFieldBase.hxx.
|
private |
Cached copy of fField->GetValueSize()
Definition at line 698 of file RFieldBase.hxx.