24 : fModel(model), fIndex(
index)
30 if (!fWritePage[0].IsNull())
31 fPageSink->ReleasePage(fWritePage[0]);
32 if (!fWritePage[1].IsNull())
33 fPageSink->ReleasePage(fWritePage[1]);
34 if (!fReadPage.IsNull())
35 fPageSource->ReleasePage(fReadPage);
37 fPageSink->DropColumn(fHandleSink);
39 fPageSource->DropColumn(fHandleSource);
45 fPageSink = &pageSink;
46 fFirstElementIndex = firstElementIndex;
47 fHandleSink = fPageSink->
AddColumn(fieldId, *
this);
48 fApproxNElementsPerPage = fPageSink->GetWriteOptions().GetApproxUnzippedPageSize() / fElement->GetSize();
49 if (fApproxNElementsPerPage < 2)
55 fWritePage[0] = fPageSink->ReservePage(fHandleSink, fApproxNElementsPerPage + fApproxNElementsPerPage / 2);
56 fWritePage[1] = fPageSink->ReservePage(fHandleSink, fApproxNElementsPerPage + fApproxNElementsPerPage / 2);
59 fWritePage[0] = fPageSink->ReservePage(fHandleSink, fApproxNElementsPerPage);
65 fPageSource = &pageSource;
66 fHandleSource = fPageSource->
AddColumn(fieldId, *
this);
67 fNElements = fPageSource->GetNElements(fHandleSource);
68 fColumnIdSource = fPageSource->GetColumnId(fHandleSource);
70 auto descriptorGuard = fPageSource->GetSharedDescriptorGuard();
71 fFirstElementIndex = descriptorGuard->GetColumnDescriptor(fColumnIdSource).GetFirstElementIndex();
77 auto otherIdx = 1 - fWritePageIdx;
78 if (fWritePage[fWritePageIdx].IsEmpty() && fWritePage[otherIdx].IsEmpty())
81 if ((fWritePage[fWritePageIdx].GetNElements() < fApproxNElementsPerPage / 2) && !fWritePage[otherIdx].IsEmpty()) {
83 auto &thisPage = fWritePage[fWritePageIdx];
84 R__ASSERT(fWritePage[otherIdx].GetMaxElements() >= fWritePage[otherIdx].GetNElements() + thisPage.GetNElements());
85 void *dst = fWritePage[otherIdx].GrowUnchecked(thisPage.GetNElements());
86 memcpy(dst, thisPage.GetBuffer(), thisPage.GetNBytes());
88 std::swap(fWritePageIdx, otherIdx);
91 R__ASSERT(fWritePage[otherIdx].IsEmpty());
92 fPageSink->CommitPage(fHandleSink, fWritePage[fWritePageIdx]);
93 fWritePage[fWritePageIdx].Reset(fNElements);
98 fPageSource->ReleasePage(fReadPage);
102 fReadPage = fPageSource->PopulatePage(fHandleSource,
index);
108 fPageSource->ReleasePage(fReadPage);
112 fReadPage = fPageSource->PopulatePage(fHandleSource, clusterIndex);
113 R__ASSERT(fReadPage.Contains(clusterIndex));
#define R__FAIL(msg)
Short-hand to return an RResult<T> in an error state; the RError is implicitly converted into RResult...
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
void ConnectPageSink(DescriptorId_t fieldId, RPageSink &pageSink, NTupleSize_t firstElementIndex=0U)
Connect the column to a page sink.
void MapPage(const NTupleSize_t index)
void ConnectPageSource(DescriptorId_t fieldId, RPageSource &pageSource)
Connect the column to a page source.
RColumn(const RColumnModel &model, std::uint32_t index)
Abstract interface to write data into an ntuple.
const RNTupleWriteOptions & GetWriteOptions() const
Returns the sink's write options.
Abstract interface to read data from an ntuple.
ColumnHandle_t AddColumn(DescriptorId_t fieldId, const RColumn &column) override
Register a new column.
virtual ColumnHandle_t AddColumn(DescriptorId_t fieldId, const RColumn &column)=0
Register a new column.
A page is a slice of a column that is mapped into memory.
Addresses a column element or field item relative to a particular cluster, instead of a global NTuple...
Holds the static meta-data of an RNTuple column.
Base class for all ROOT issued exceptions.
bool GetUseTailPageOptimization() const
std::uint64_t NTupleSize_t
Integer type long enough to hold the maximum number of entries in a column.
std::uint64_t DescriptorId_t
Distriniguishes elements of the same type within a descriptor, e.g. different fields.