25 namespace Experimental {
49 DescriptorId_t fId = 0;
51 NTupleSize_t fIndexOffset = 0;
53 RClusterInfo() =
default;
54 RClusterInfo(NTupleSize_t
id, NTupleSize_t indexOffset) : fId(id), fIndexOffset(indexOffset) {}
55 NTupleSize_t GetId()
const {
return fId; }
56 NTupleSize_t GetIndexOffset()
const {
return fIndexOffset; }
62 ClusterSize_t::ValueType fCapacity;
63 ClusterSize_t::ValueType fElementSize;
64 ClusterSize_t::ValueType fNElements;
65 NTupleSize_t fRangeFirst;
66 RClusterInfo fClusterInfo;
69 RPage() : fColumnId(kInvalidColumnId), fBuffer(nullptr), fCapacity(0), fElementSize(0), fNElements(0), fRangeFirst(0)
71 RPage(ColumnId_t columnId,
void* buffer, ClusterSize_t::ValueType capacity, ClusterSize_t::ValueType elementSize)
72 : fColumnId(columnId), fBuffer(buffer), fCapacity(capacity), fElementSize(elementSize), fNElements(0),
77 ColumnId_t GetColumnId() {
return fColumnId; }
79 ClusterSize_t::ValueType GetCapacity()
const {
return fCapacity; }
81 ClusterSize_t::ValueType GetSize()
const {
return fElementSize * fNElements; }
82 ClusterSize_t::ValueType GetElementSize()
const {
return fElementSize; }
83 ClusterSize_t::ValueType GetNElements()
const {
return fNElements; }
84 NTupleSize_t GetGlobalRangeFirst()
const {
return fRangeFirst; }
85 NTupleSize_t GetGlobalRangeLast()
const {
return fRangeFirst + NTupleSize_t(fNElements) - 1; }
86 ClusterSize_t::ValueType GetClusterRangeFirst()
const {
return fRangeFirst - fClusterInfo.GetIndexOffset(); }
87 ClusterSize_t::ValueType GetClusterRangeLast()
const {
88 return GetClusterRangeFirst() + NTupleSize_t(fNElements) - 1;
90 const RClusterInfo& GetClusterInfo()
const {
return fClusterInfo; }
92 bool Contains(NTupleSize_t globalIndex)
const {
93 return (globalIndex >= fRangeFirst) && (globalIndex < fRangeFirst + NTupleSize_t(fNElements));
96 bool Contains(
const RClusterIndex &clusterIndex)
const {
97 if (fClusterInfo.GetId() != clusterIndex.GetClusterId())
99 auto clusterRangeFirst = ClusterSize_t(fRangeFirst - fClusterInfo.GetIndexOffset());
100 return (clusterIndex.GetIndex() >= clusterRangeFirst) &&
101 (clusterIndex.GetIndex() < clusterRangeFirst + fNElements);
104 void* GetBuffer()
const {
return fBuffer; }
107 void* TryGrow(ClusterSize_t::ValueType nElements) {
108 auto offset = GetSize();
109 auto nbyte = nElements * fElementSize;
110 if (offset + nbyte > fCapacity) {
113 fNElements += nElements;
114 return static_cast<unsigned char *
>(fBuffer) + offset;
117 void SetWindow(
const NTupleSize_t rangeFirst,
const RClusterInfo &clusterInfo) {
118 fClusterInfo = clusterInfo;
119 fRangeFirst = rangeFirst;
122 void Reset(NTupleSize_t rangeFirst) { fNElements = 0; fRangeFirst = rangeFirst; }
123 void ResetCluster(
const RClusterInfo &clusterInfo) { fNElements = 0; fClusterInfo = clusterInfo; }
125 bool IsNull()
const {
return fBuffer ==
nullptr; }
126 bool operator ==(
const RPage &other)
const {
return fBuffer == other.fBuffer; }
127 bool operator !=(
const RPage &other)
const {
return !(*
this == other); }