16 #ifndef ROOT7_RNTupleUtil
17 #define ROOT7_RNTupleUtil
25 namespace Experimental {
33 enum ENTupleStructure {
43 using NTupleSize_t = std::uint64_t;
44 constexpr NTupleSize_t kInvalidNTupleIndex = std::uint64_t(-1);
47 using ValueType = std::uint32_t;
49 RClusterSize() : fValue(0) {}
50 explicit constexpr RClusterSize(ValueType value) : fValue(value) {}
51 RClusterSize& operator =(
const ValueType value) { fValue = value;
return *
this; }
52 RClusterSize& operator +=(
const ValueType value) { fValue += value;
return *
this; }
53 RClusterSize operator++(
int) {
auto result = *
this; fValue++;
return result; }
54 operator ValueType()
const {
return fValue; }
58 using ClusterSize_t = RClusterSize;
59 constexpr ClusterSize_t kInvalidClusterIndex(std::uint32_t(-1));
65 std::uint32_t fTag = 0;
68 RColumnSwitch() =
default;
69 RColumnSwitch(ClusterSize_t index, std::uint32_t tag) : fIndex(index), fTag(tag) { }
70 ClusterSize_t GetIndex()
const {
return fIndex; }
71 std::uint32_t GetTag()
const {
return fTag; }
75 using ColumnId_t = std::int64_t;
76 constexpr ColumnId_t kInvalidColumnId = -1;
79 using DescriptorId_t = std::uint64_t;
80 constexpr DescriptorId_t kInvalidDescriptorId = std::uint64_t(-1);
85 DescriptorId_t fClusterId = kInvalidDescriptorId;
86 ClusterSize_t::ValueType fIndex = kInvalidClusterIndex;
88 RClusterIndex() =
default;
89 RClusterIndex(
const RClusterIndex &other) =
default;
90 RClusterIndex &operator =(
const RClusterIndex &other) =
default;
91 constexpr RClusterIndex(DescriptorId_t clusterId, ClusterSize_t::ValueType index)
92 : fClusterId(clusterId), fIndex(index) {}
94 RClusterIndex operator+(ClusterSize_t::ValueType off)
const {
return RClusterIndex(fClusterId, fIndex + off); }
95 RClusterIndex operator-(ClusterSize_t::ValueType off)
const {
return RClusterIndex(fClusterId, fIndex - off); }
96 RClusterIndex operator++(
int) {
auto r = *
this; fIndex++;
return r; }
97 RClusterIndex& operator++() { ++fIndex;
return *
this; }
98 bool operator==(
const RClusterIndex &other)
const {
99 return fClusterId == other.fClusterId && fIndex == other.fIndex;
101 bool operator!=(
const RClusterIndex &other)
const {
return !(*
this == other); }
103 DescriptorId_t GetClusterId()
const {
return fClusterId; }
104 ClusterSize_t::ValueType GetIndex()
const {
return fIndex; }
108 using RNTupleUuid = std::string;
112 using NTupleFlags_t = std::uint64_t;
115 class RNTupleVersion {
118 std::uint32_t fVersionUse = 0;
120 std::uint32_t fVersionMin = 0;
121 NTupleFlags_t fFlags = 0;
124 RNTupleVersion() =
default;
125 RNTupleVersion(std::uint32_t versionUse, std::uint32_t versionMin)
126 : fVersionUse(versionUse), fVersionMin(versionMin)
128 RNTupleVersion(std::uint32_t versionUse, std::uint32_t versionMin, NTupleFlags_t flags)
129 : fVersionUse(versionUse), fVersionMin(versionMin), fFlags(flags)
132 bool operator ==(
const RNTupleVersion &other)
const {
133 return fVersionUse == other.fVersionUse && fVersionMin == other.fVersionMin && fFlags == other.fFlags;
136 std::uint32_t GetVersionUse()
const {
return fVersionUse; }
137 std::uint32_t GetVersionMin()
const {
return fVersionMin; }
138 NTupleFlags_t GetFlags()
const {
return fFlags; }