14#ifndef ROOT_RField_Fundamental
15#define ROOT_RField_Fundamental
18#error "Please include RField.hxx!"
32namespace Experimental {
47 static std::string
TypeName() {
return "void"; }
67 return std::make_unique<RField>(
newName);
70 const RColumnRepresentations &GetColumnRepresentations()
const final;
73 static std::
string TypeName() {
return "bool"; }
89 return std::make_unique<RField>(
newName);
92 const RColumnRepresentations &GetColumnRepresentations()
const final;
95 static std::
string TypeName() {
return "char"; }
119 const RColumnRepresentations &GetColumnRepresentations()
const final;
122 static std::string TypeName() {
return "std::int8_t"; }
123 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
124 RIntegralField(RIntegralField &&
other) =
default;
126 ~RIntegralField()
override =
default;
136 const RColumnRepresentations &GetColumnRepresentations()
const final;
139 static std::
string TypeName() {
return "std::uint8_t"; }
140 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
141 RIntegralField(RIntegralField &&
other) =
default;
143 ~RIntegralField()
override =
default;
153 const RColumnRepresentations &GetColumnRepresentations()
const final;
156 static std::
string TypeName() {
return "std::int16_t"; }
157 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
158 RIntegralField(RIntegralField &&
other) =
default;
160 ~RIntegralField()
override =
default;
170 const RColumnRepresentations &GetColumnRepresentations()
const final;
173 static std::
string TypeName() {
return "std::uint16_t"; }
174 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
175 RIntegralField(RIntegralField &&
other) =
default;
177 ~RIntegralField()
override =
default;
187 const RColumnRepresentations &GetColumnRepresentations()
const final;
190 static std::
string TypeName() {
return "std::int32_t"; }
191 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
192 RIntegralField(RIntegralField &&
other) =
default;
194 ~RIntegralField()
override =
default;
204 const RColumnRepresentations &GetColumnRepresentations()
const final;
207 static std::
string TypeName() {
return "std::uint32_t"; }
208 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
209 RIntegralField(RIntegralField &&
other) =
default;
211 ~RIntegralField()
override =
default;
221 const RColumnRepresentations &GetColumnRepresentations()
const final;
224 static std::
string TypeName() {
return "std::int64_t"; }
225 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
226 RIntegralField(RIntegralField &&
other) =
default;
228 ~RIntegralField()
override =
default;
238 const RColumnRepresentations &GetColumnRepresentations()
const final;
241 static std::
string TypeName() {
return "std::uint64_t"; }
242 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
243 RIntegralField(RIntegralField &&
other) =
default;
245 ~RIntegralField()
override =
default;
263 static_assert(
sizeof(
signed char) ==
sizeof(std::int8_t));
268 static_assert(
sizeof(
unsigned char) ==
sizeof(std::uint8_t));
273 static_assert(
sizeof(short) ==
sizeof(std::int16_t));
278 static_assert(
sizeof(
unsigned short) ==
sizeof(std::uint16_t));
283 static_assert(
sizeof(
int) ==
sizeof(std::int32_t));
288 static_assert(
sizeof(
unsigned int) ==
sizeof(std::uint32_t));
293 static_assert(
sizeof(long) ==
sizeof(std::int32_t) ||
sizeof(long) ==
sizeof(std::int64_t));
294 using type = std::conditional_t<
sizeof(long) ==
sizeof(std::int32_t), std::int32_t, std::int64_t>;
298 static_assert(
sizeof(
unsigned long) ==
sizeof(std::uint32_t) ||
sizeof(
unsigned long) ==
sizeof(std::uint64_t));
299 using type = std::conditional_t<
sizeof(
unsigned long) ==
sizeof(std::uint32_t), std::uint32_t, std::uint64_t>;
303 static_assert(
sizeof(
long long) ==
sizeof(std::int64_t));
308 static_assert(
sizeof(
unsigned long long) ==
sizeof(std::uint64_t));
315 :
public RIntegralField<typename Internal::RIntegralTypeMap<T>::type> {
317 static_assert(
sizeof(T) ==
sizeof(MappedType),
"invalid size of mapped type");
318 static_assert(std::is_signed_v<T> == std::is_signed_v<MappedType>,
"invalid signedness of mapped type");
324 return std::make_unique<RField>(
newName);
328 RField(std::string_view
name) : RIntegralField<MappedType>(
name) {}
356 using Base::fAvailableColumns;
357 using Base::fColumnRepresentatives;
358 using Base::fPrincipalColumn;
360 std::size_t fBitWidth =
sizeof(T) * 8;
361 double fValueMin = std::numeric_limits<T>::min();
362 double fValueMax = std::numeric_limits<T>::max();
368 fBitWidth(
source.fBitWidth),
369 fValueMin(
source.fValueMin),
370 fValueMax(
source.fValueMax)
376 const auto r = Base::GetColumnRepresentatives();
377 const auto n =
r.size();
378 fAvailableColumns.reserve(
n);
379 for (std::uint16_t i = 0; i <
n; ++i) {
380 auto &column = fAvailableColumns.emplace_back(ROOT::Internal::RColumn::Create<T>(
r[i][0], 0, i));
382 column->SetBitsOnStorage(fBitWidth);
384 column->SetBitsOnStorage(fBitWidth);
385 column->SetValueRange(fValueMin, fValueMax);
388 fPrincipalColumn = fAvailableColumns[0].get();
402 const auto &
fdesc = desc.GetFieldDescriptor(Base::GetOnDiskId());
403 const auto &
coldesc = desc.GetColumnDescriptor(
fdesc.GetLogicalColumnIds()[0]);
404 column->SetBitsOnStorage(
coldesc.GetBitsOnStorage());
406 const auto &
fdesc = desc.GetFieldDescriptor(Base::GetOnDiskId());
407 const auto &
coldesc = desc.GetColumnDescriptor(
fdesc.GetLogicalColumnIds()[0]);
410 column->SetBitsOnStorage(
coldesc.GetBitsOnStorage());
420 fPrincipalColumn = fAvailableColumns[0].get();
426 using Base::SetColumnRepresentatives;
448 throw RException(
R__FAIL(
"SetTruncated() argument nBits = " + std::to_string(nBits) +
449 " is out of valid range [" + std::to_string(
minBits) +
", " +
450 std::to_string(
maxBits) +
"])"));
470 throw RException(
R__FAIL(
"value range given to SetQuantized() has max < min! (" +
474 throw RException(
R__FAIL(
"SetQuantized() argument nBits = " + std::to_string(nBits) +
475 " is out of valid range [" + std::to_string(
minBits) +
", " +
476 std::to_string(
maxBits) +
"])"));
484 R__DEPRECATED(6, 42,
"Use SetQuantized(std::size_t nBits, std::pair<T> valueRange) instead")
485 void SetQuantized(T
minValue, T maxValue, std::
size_t nBits) { SetQuantized(nBits, {
minValue, maxValue}); }
#define R__FAIL(msg)
Short-hand to return an RResult<T> in an error state; the RError is implicitly converted into RResult...
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
Binding & operator=(OUT(*fun)(void))
Abstract base class for classes implementing the visitor design pattern.
static std::pair< std::uint16_t, std::uint16_t > GetValidBitRange(ROOT::ENTupleColumnType type)
Most types have a fixed on-disk bit width.
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
Base class for all ROOT issued exceptions.
The list of column representations a field can have.
A field translates read and write calls from/to underlying columns to/from tree values.
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
RField(std::string_view name)
RField & operator=(RField &&other)=default
RField(RField &&other)=default
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
RField(RField &&other)=default
RField & operator=(RField &&other)=default
RField(std::string_view name)
RField(std::string_view name, const RField &source)
RField(std::string_view name)
static std::string TypeName()
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
static std::string TypeName()
RField(std::string_view name)
RField(std::string_view name, const RField &source)
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
static std::string TypeName()
RField & operator=(const RField &)=delete
RField(const RField &)=delete
Classes with dictionaries that can be inspected by TClass.
RField & operator=(RField &&other)=default
RField(std::string_view name)
The on-storage metadata of an RNTuple.
~RRealField() override=default
RRealField(std::string_view name, const RRealField &source)
Called by derived fields' CloneImpl()
RRealField(std::string_view name, std::string_view typeName)
R__DEPRECATED(6, 42, "Use SetQuantized(std::size_t nBits, std::pair<T> valueRange) instead") void SetQuantized(T minValue
void SetHalfPrecision()
Sets this field to use a half precision representation, occupying half as much storage space (16 bits...
void SetQuantized(std::size_t nBits, std::pair< T, T > valueRange)
Sets this field to use a quantized integer representation using nBits per value.
void GenerateColumns() final
Implementations in derived classes should create the backing columns corresponding to the field type ...
void SetTruncated(std::size_t nBits)
Set the on-disk representation of this field to a single-precision float truncated to nBits.
RRealField & operator=(RRealField &&other)=default
void GenerateColumns(const ROOT::RNTupleDescriptor &desc) final
Implementations in derived classes should create the backing columns corresponding to the field type ...
RRealField(RRealField &&other)=default
auto Map(Args &&... args)
Create new collection applying a callable to the elements of the input collection.
std::uint64_t NTupleSize_t
Integer type long enough to hold the maximum number of entries in a column.
std::conditional_t< sizeof(long)==sizeof(std::int32_t), std::int32_t, std::int64_t > type
std::conditional_t< sizeof(unsigned long)==sizeof(std::uint32_t), std::uint32_t, std::uint64_t > type