16#ifndef ROOT7_RField_Fundamental
17#define ROOT7_RField_Fundamental
20#error "Please include RField.hxx!"
34namespace Experimental {
49 static std::string
TypeName() {
return "void"; }
69 return std::make_unique<RField>(
newName);
72 const RColumnRepresentations &GetColumnRepresentations()
const final;
75 static std::
string TypeName() {
return "bool"; }
91 return std::make_unique<RField>(
newName);
94 const RColumnRepresentations &GetColumnRepresentations()
const final;
97 static std::
string TypeName() {
return "char"; }
121 const RColumnRepresentations &GetColumnRepresentations()
const final;
124 static std::string TypeName() {
return "std::int8_t"; }
125 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
126 RIntegralField(RIntegralField &&
other) =
default;
128 ~RIntegralField()
override =
default;
138 const RColumnRepresentations &GetColumnRepresentations()
const final;
141 static std::
string TypeName() {
return "std::uint8_t"; }
142 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
143 RIntegralField(RIntegralField &&
other) =
default;
145 ~RIntegralField()
override =
default;
155 const RColumnRepresentations &GetColumnRepresentations()
const final;
158 static std::
string TypeName() {
return "std::int16_t"; }
159 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
160 RIntegralField(RIntegralField &&
other) =
default;
162 ~RIntegralField()
override =
default;
172 const RColumnRepresentations &GetColumnRepresentations()
const final;
175 static std::
string TypeName() {
return "std::uint16_t"; }
176 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
177 RIntegralField(RIntegralField &&
other) =
default;
179 ~RIntegralField()
override =
default;
189 const RColumnRepresentations &GetColumnRepresentations()
const final;
192 static std::
string TypeName() {
return "std::int32_t"; }
193 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
194 RIntegralField(RIntegralField &&
other) =
default;
196 ~RIntegralField()
override =
default;
206 const RColumnRepresentations &GetColumnRepresentations()
const final;
209 static std::
string TypeName() {
return "std::uint32_t"; }
210 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
211 RIntegralField(RIntegralField &&
other) =
default;
213 ~RIntegralField()
override =
default;
223 const RColumnRepresentations &GetColumnRepresentations()
const final;
226 static std::
string TypeName() {
return "std::int64_t"; }
227 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
228 RIntegralField(RIntegralField &&
other) =
default;
230 ~RIntegralField()
override =
default;
240 const RColumnRepresentations &GetColumnRepresentations()
const final;
243 static std::
string TypeName() {
return "std::uint64_t"; }
244 explicit RIntegralField(std::string_view
name) : RSimpleField(
name, TypeName()) {}
245 RIntegralField(RIntegralField &&
other) =
default;
247 ~RIntegralField()
override =
default;
265 static_assert(
sizeof(
signed char) ==
sizeof(std::int8_t));
270 static_assert(
sizeof(
unsigned char) ==
sizeof(std::uint8_t));
275 static_assert(
sizeof(short) ==
sizeof(std::int16_t));
280 static_assert(
sizeof(
unsigned short) ==
sizeof(std::uint16_t));
285 static_assert(
sizeof(
int) ==
sizeof(std::int32_t));
290 static_assert(
sizeof(
unsigned int) ==
sizeof(std::uint32_t));
295 static_assert(
sizeof(long) ==
sizeof(std::int32_t) ||
sizeof(long) ==
sizeof(std::int64_t));
296 using type = std::conditional_t<
sizeof(long) ==
sizeof(std::int32_t), std::int32_t, std::int64_t>;
300 static_assert(
sizeof(
unsigned long) ==
sizeof(std::uint32_t) ||
sizeof(
unsigned long) ==
sizeof(std::uint64_t));
301 using type = std::conditional_t<
sizeof(
unsigned long) ==
sizeof(std::uint32_t), std::uint32_t, std::uint64_t>;
305 static_assert(
sizeof(
long long) ==
sizeof(std::int64_t));
310 static_assert(
sizeof(
unsigned long long) ==
sizeof(std::uint64_t));
317 :
public RIntegralField<typename Internal::RIntegralTypeMap<T>::type> {
319 static_assert(
sizeof(T) ==
sizeof(MappedType),
"invalid size of mapped type");
320 static_assert(std::is_signed_v<T> == std::is_signed_v<MappedType>,
"invalid signedness of mapped type");
326 return std::make_unique<RField>(
newName);
330 RField(std::string_view
name) : RIntegralField<MappedType>(
name) {}
358 using Base::fAvailableColumns;
359 using Base::fColumnRepresentatives;
360 using Base::fPrincipalColumn;
362 std::size_t fBitWidth =
sizeof(T) * 8;
363 double fValueMin = std::numeric_limits<T>::min();
364 double fValueMax = std::numeric_limits<T>::max();
370 fBitWidth(
source.fBitWidth),
371 fValueMin(
source.fValueMin),
372 fValueMax(
source.fValueMax)
378 const auto r = Base::GetColumnRepresentatives();
379 const auto n =
r.size();
380 fAvailableColumns.reserve(
n);
381 for (std::uint16_t i = 0; i <
n; ++i) {
382 auto &column = fAvailableColumns.emplace_back(ROOT::Internal::RColumn::Create<T>(
r[i][0], 0, i));
384 column->SetBitsOnStorage(fBitWidth);
386 column->SetBitsOnStorage(fBitWidth);
387 column->SetValueRange(fValueMin, fValueMax);
390 fPrincipalColumn = fAvailableColumns[0].get();
404 const auto &
fdesc = desc.GetFieldDescriptor(Base::GetOnDiskId());
405 const auto &
coldesc = desc.GetColumnDescriptor(
fdesc.GetLogicalColumnIds()[0]);
406 column->SetBitsOnStorage(
coldesc.GetBitsOnStorage());
408 const auto &
fdesc = desc.GetFieldDescriptor(Base::GetOnDiskId());
409 const auto &
coldesc = desc.GetColumnDescriptor(
fdesc.GetLogicalColumnIds()[0]);
412 column->SetBitsOnStorage(
coldesc.GetBitsOnStorage());
422 fPrincipalColumn = fAvailableColumns[0].get();
428 using Base::SetColumnRepresentatives;
451 " is out of valid range [" + std::to_string(
minBits) +
", " +
452 std::to_string(
maxBits) +
"])"));
472 " is out of valid range [" + std::to_string(
minBits) +
", " +
473 std::to_string(
maxBits) +
"])"));
523namespace Experimental {
526using RIntegralField [[deprecated(
"ROOT::Experimental::RIntegralField moved to ROOT::RIntegralField")]] =
#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)
void SetHalfPrecision()
Sets this field to use a half precision representation, occupying half as much storage space (16 bits...
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 ...
void SetQuantized(double minValue, double maxValue, std::size_t nBits)
Sets this field to use a quantized integer representation using nBits per value.
RRealField(RRealField &&other)=default
auto Map(Args &&... args)
Create new collection applying a callable to the elements of the input collection.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
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