A column is a storage-backed array of a simple, fixed-size type, from which pages can be mapped into memory.
Definition at line 42 of file RColumn.hxx.
Public Member Functions | |
RColumn (const RColumn &)=delete | |
~RColumn () | |
void | Append (const void *from) |
void | AppendV (const void *from, std::size_t count) |
void | CommitSuppressed () |
void | ConnectPageSink (DescriptorId_t fieldId, RPageSink &pageSink, NTupleSize_t firstElementIndex=0U) |
Connect the column to a page sink. | |
void | ConnectPageSource (DescriptorId_t fieldId, RPageSource &pageSource) |
Connect the column to a page source. | |
void | Flush () |
std::uint16_t | GetBitsOnStorage () const |
RClusterIndex | GetClusterIndex (NTupleSize_t globalIndex) |
void | GetCollectionInfo (const NTupleSize_t globalIndex, RClusterIndex *collectionStart, ClusterSize_t *collectionSize) |
For offset columns only, look at the two adjacent values that define a collection's coordinates. | |
void | GetCollectionInfo (RClusterIndex clusterIndex, RClusterIndex *collectionStart, ClusterSize_t *collectionSize) |
ColumnId_t | GetColumnIdSource () const |
RColumnElementBase * | GetElement () const |
NTupleSize_t | GetFirstElementIndex () const |
NTupleSize_t | GetGlobalIndex (RClusterIndex clusterIndex) |
RPageStorage::ColumnHandle_t | GetHandleSink () const |
RPageStorage::ColumnHandle_t | GetHandleSource () const |
std::uint32_t | GetIndex () const |
NTupleSize_t | GetNElements () const |
RPageSink * | GetPageSink () const |
RPageSource * | GetPageSource () const |
std::uint16_t | GetRepresentationIndex () const |
void | GetSwitchInfo (NTupleSize_t globalIndex, RClusterIndex *varIndex, std::uint32_t *tag) |
Get the currently active cluster id. | |
EColumnType | GetType () const |
template<typename CppT > | |
CppT * | Map (const NTupleSize_t globalIndex) |
template<typename CppT > | |
CppT * | Map (RClusterIndex clusterIndex) |
void | MapPage (NTupleSize_t globalIndex) |
void | MapPage (RClusterIndex clusterIndex) |
template<typename CppT > | |
CppT * | MapV (const NTupleSize_t globalIndex, NTupleSize_t &nItems) |
template<typename CppT > | |
CppT * | MapV (RClusterIndex clusterIndex, NTupleSize_t &nItems) |
void | MergeTeams (RColumn &other) |
RColumn & | operator= (const RColumn &)=delete |
void | Read (const NTupleSize_t globalIndex, void *to) |
void | Read (RClusterIndex clusterIndex, void *to) |
bool | ReadPageContains (NTupleSize_t globalIndex) const |
bool | ReadPageContains (RClusterIndex clusterIndex) const |
void | ReadV (const NTupleSize_t globalIndex, const ClusterSize_t::ValueType count, void *to) |
void | ReadV (RClusterIndex clusterIndex, const ClusterSize_t::ValueType count, void *to) |
bool | TryMapPage (NTupleSize_t globalIndex) |
bool | TryMapPage (RClusterIndex clusterIndex) |
Static Public Member Functions | |
template<typename CppT > | |
static std::unique_ptr< RColumn > | Create (EColumnType type, std::uint32_t columnIdx, std::uint16_t representationIdx) |
Private Member Functions | |
RColumn (EColumnType type, std::uint32_t columnIndex, std::uint16_t representationIndex) | |
void | FlushShadowWritePage () |
When the main write page surpasses the 50% fill level, the (full) shadow write page gets flushed. | |
void | HandleWritePageIfFull () |
Used in Append() and AppendV() to handle the case when the main page reached the target size. | |
Private Attributes | |
std::uint32_t | fApproxNElementsPerPage = 0 |
For writing, the targeted number of elements, given by fApproxNElementsPerPage (in the write options) and the element size. | |
std::uint16_t | fBitsOnStorage = 0 |
ColumnId_t | fColumnIdSource = kInvalidColumnId |
The column id is used to find matching pages with content when reading. | |
std::unique_ptr< RColumnElementBase > | fElement |
Used to pack and unpack pages on writing/reading. | |
NTupleSize_t | fFirstElementIndex = 0 |
Global index of the first element in this column; usually == 0, unless it is a deferred column. | |
RPageStorage::ColumnHandle_t | fHandleSink |
RPageStorage::ColumnHandle_t | fHandleSource |
std::uint32_t | fIndex |
Columns belonging to the same field are distinguished by their order. | |
std::size_t | fLastGoodTeamIdx = 0 |
Points into fTeam to the column that successfully returned the last page. | |
NTupleSize_t | fNElements = 0 |
The number of elements written resp. available in the column. | |
RPageSink * | fPageSink = nullptr |
RPageSource * | fPageSource = nullptr |
RPageRef | fReadPageRef |
The currently mapped page for reading. | |
std::uint16_t | fRepresentationIndex |
Fields can have multiple column representations, distinguished by representation index. | |
std::vector< RColumn * > | fTeam |
The column team is a set of columns that serve the same column index for different representation IDs. | |
EColumnType | fType |
RPage | fWritePage [2] |
A set of open pages into which new elements are being written. | |
int | fWritePageIdx = 0 |
Index of the current write page. | |
#include <ROOT/RColumn.hxx>
|
private |
Definition at line 26 of file RColumn.cxx.
|
delete |
ROOT::Experimental::Internal::RColumn::~RColumn | ( | ) |
Definition at line 36 of file RColumn.cxx.
|
inline |
Definition at line 141 of file RColumn.hxx.
|
inline |
Definition at line 155 of file RColumn.hxx.
void ROOT::Experimental::Internal::RColumn::CommitSuppressed | ( | ) |
Definition at line 98 of file RColumn.cxx.
void ROOT::Experimental::Internal::RColumn::ConnectPageSink | ( | DescriptorId_t | fieldId, |
RPageSink & | pageSink, | ||
NTupleSize_t | firstElementIndex = 0U |
||
) |
Connect the column to a page sink.
firstElementIndex
can be used to specify the first column element index with backing storage for this column. On read back, elements before firstElementIndex
will cause the zero page to be mapped.
Definition at line 44 of file RColumn.cxx.
void ROOT::Experimental::Internal::RColumn::ConnectPageSource | ( | DescriptorId_t | fieldId, |
RPageSource & | pageSource | ||
) |
Connect the column to a page source.
Definition at line 65 of file RColumn.cxx.
|
inlinestatic |
Definition at line 123 of file RColumn.hxx.
void ROOT::Experimental::Internal::RColumn::Flush | ( | ) |
Definition at line 77 of file RColumn.cxx.
|
inlineprivate |
When the main write page surpasses the 50% fill level, the (full) shadow write page gets flushed.
Definition at line 110 of file RColumn.hxx.
|
inline |
Definition at line 359 of file RColumn.hxx.
|
inline |
Definition at line 293 of file RColumn.hxx.
|
inline |
For offset columns only, look at the two adjacent values that define a collection's coordinates.
Definition at line 303 of file RColumn.hxx.
|
inline |
Definition at line 326 of file RColumn.hxx.
|
inline |
Definition at line 362 of file RColumn.hxx.
|
inline |
Definition at line 357 of file RColumn.hxx.
|
inline |
Definition at line 363 of file RColumn.hxx.
|
inline |
Definition at line 285 of file RColumn.hxx.
|
inline |
Definition at line 367 of file RColumn.hxx.
|
inline |
Definition at line 366 of file RColumn.hxx.
|
inline |
Definition at line 360 of file RColumn.hxx.
|
inline |
Definition at line 356 of file RColumn.hxx.
|
inline |
Definition at line 365 of file RColumn.hxx.
|
inline |
Definition at line 364 of file RColumn.hxx.
|
inline |
Definition at line 361 of file RColumn.hxx.
|
inline |
Get the currently active cluster id.
Definition at line 336 of file RColumn.hxx.
|
inline |
Definition at line 358 of file RColumn.hxx.
|
inlineprivate |
Used in Append() and AppendV() to handle the case when the main page reached the target size.
If tail page optimization is enabled, switch the pages; the other page has been flushed when the main page reached 50%. Without tail page optimization, flush the current page to make room for future writes.
Definition at line 92 of file RColumn.hxx.
|
inline |
Definition at line 246 of file RColumn.hxx.
|
inline |
Definition at line 253 of file RColumn.hxx.
|
inline |
Definition at line 346 of file RColumn.hxx.
|
inline |
Definition at line 347 of file RColumn.hxx.
|
inline |
Definition at line 260 of file RColumn.hxx.
|
inline |
Definition at line 273 of file RColumn.hxx.
void ROOT::Experimental::Internal::RColumn::MergeTeams | ( | RColumn & | other | ) |
Definition at line 133 of file RColumn.cxx.
|
inline |
Definition at line 185 of file RColumn.hxx.
|
inline |
Definition at line 196 of file RColumn.hxx.
|
inline |
Definition at line 351 of file RColumn.hxx.
|
inline |
Definition at line 352 of file RColumn.hxx.
|
inline |
Definition at line 207 of file RColumn.hxx.
|
inline |
Definition at line 226 of file RColumn.hxx.
bool ROOT::Experimental::Internal::RColumn::TryMapPage | ( | NTupleSize_t | globalIndex | ) |
Definition at line 103 of file RColumn.cxx.
bool ROOT::Experimental::Internal::RColumn::TryMapPage | ( | RClusterIndex | clusterIndex | ) |
Definition at line 118 of file RColumn.cxx.
|
private |
For writing, the targeted number of elements, given by fApproxNElementsPerPage
(in the write options) and the element size.
We ensure this value to be >= 2 in Connect() so that we have meaningful "page full" and "page half full" events when writing the page.
Definition at line 67 of file RColumn.hxx.
|
private |
Definition at line 45 of file RColumn.hxx.
|
private |
The column id is used to find matching pages with content when reading.
Definition at line 73 of file RColumn.hxx.
|
private |
Used to pack and unpack pages on writing/reading.
Definition at line 77 of file RColumn.hxx.
|
private |
Global index of the first element in this column; usually == 0, unless it is a deferred column.
Definition at line 75 of file RColumn.hxx.
|
private |
Definition at line 53 of file RColumn.hxx.
|
private |
Definition at line 54 of file RColumn.hxx.
|
private |
Columns belonging to the same field are distinguished by their order.
E.g. for an std::string field, there is the offset column with index 0 and the character value column with index 1.
Definition at line 48 of file RColumn.hxx.
|
private |
Points into fTeam to the column that successfully returned the last page.
Definition at line 84 of file RColumn.hxx.
|
private |
The number of elements written resp. available in the column.
Definition at line 69 of file RColumn.hxx.
|
private |
Definition at line 51 of file RColumn.hxx.
|
private |
Definition at line 52 of file RColumn.hxx.
|
private |
The currently mapped page for reading.
Definition at line 71 of file RColumn.hxx.
|
private |
Fields can have multiple column representations, distinguished by representation index.
Definition at line 50 of file RColumn.hxx.
|
private |
The column team is a set of columns that serve the same column index for different representation IDs.
Initially, the team has only one member, the very column it belongs to. Through MergeTeams(), two columns can join forces. The team is used to react on suppressed columns: if the current team member has a suppressed column for a MapPage() call, it get the page from the active column in the corresponding cluster.
Definition at line 82 of file RColumn.hxx.
|
private |
Definition at line 44 of file RColumn.hxx.
|
private |
A set of open pages into which new elements are being written.
The pages are used in rotation. If tail page optimization is enabled, they are 50% bigger than the target size given by the write options. The current page is filled until the target size, but it is only committed once the other write page is filled at least 50%. If a flush occurs earlier, a slightly oversized, single page will be committed. Without tail page optimization, only one page is allocated equal to the target size.
Definition at line 61 of file RColumn.hxx.
|
private |
Index of the current write page.
Definition at line 63 of file RColumn.hxx.