24 ROOT::Experimental::Detail::RColumn::RColumn(
const RColumnModel& model, std::uint32_t index)
25 : fModel(model), fIndex(index), fPageSink(nullptr), fPageSource(nullptr), fHeadPage(), fNElements(0),
27 fColumnIdSource(kInvalidColumnId)
31 ROOT::Experimental::Detail::RColumn::~RColumn()
33 if (!fHeadPage.IsNull())
34 fPageSink->ReleasePage(fHeadPage);
35 if (!fCurrentPage.IsNull())
36 fPageSource->ReleasePage(fCurrentPage);
39 void ROOT::Experimental::Detail::RColumn::Connect(DescriptorId_t fieldId, RPageStorage *pageStorage)
41 switch (pageStorage->GetType()) {
42 case EPageStorageType::kSink:
43 fPageSink =
static_cast<RPageSink*
>(pageStorage);
44 fHandleSink = fPageSink->AddColumn(fieldId, *
this);
45 fHeadPage = fPageSink->ReservePage(fHandleSink);
47 case EPageStorageType::kSource:
48 fPageSource =
static_cast<RPageSource*
>(pageStorage);
49 fHandleSource = fPageSource->AddColumn(fieldId, *
this);
50 fNElements = fPageSource->GetNElements(fHandleSource);
51 fColumnIdSource = fPageSource->GetColumnId(fHandleSource);
58 void ROOT::Experimental::Detail::RColumn::Flush()
60 if (fHeadPage.GetSize() == 0)
return;
62 fPageSink->CommitPage(fHandleSink, fHeadPage);
63 fHeadPage.Reset(fNElements);
66 void ROOT::Experimental::Detail::RColumn::MapPage(
const NTupleSize_t index)
68 fPageSource->ReleasePage(fCurrentPage);
69 fCurrentPage = fPageSource->PopulatePage(fHandleSource, index);
72 void ROOT::Experimental::Detail::RColumn::MapPage(
const RClusterIndex &clusterIndex)
74 fPageSource->ReleasePage(fCurrentPage);
75 fCurrentPage = fPageSource->PopulatePage(fHandleSource, clusterIndex);