16#ifndef ROOT7_RField_Fundamental
17#define ROOT7_RField_Fundamental
20#error "Please include RField.hxx!"
34namespace Experimental {
47 static std::string
TypeName() {
return "void"; }
65 std::unique_ptr<RFieldBase>
CloneImpl(std::string_view newName)
const final
67 return std::make_unique<RField>(newName);
70 const RColumnRepresentations &GetColumnRepresentations() const final;
73 static std::
string TypeName() {
return "bool"; }
87 std::unique_ptr<RFieldBase>
CloneImpl(std::string_view newName)
const final
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"; }
128 void AcceptVisitor(Detail::RFieldVisitor &visitor)
const final;
131extern template class RSimpleField<std::uint8_t>;
136 const RColumnRepresentations &GetColumnRepresentations() const final;
139 static std::
string TypeName() {
return "std::uint8_t"; }
145 void AcceptVisitor(Detail::RFieldVisitor &visitor)
const final;
148extern template class RSimpleField<std::int16_t>;
153 const RColumnRepresentations &GetColumnRepresentations() const final;
156 static std::
string TypeName() {
return "std::int16_t"; }
162 void AcceptVisitor(Detail::RFieldVisitor &visitor)
const final;
165extern template class RSimpleField<std::uint16_t>;
170 const RColumnRepresentations &GetColumnRepresentations() const final;
173 static std::
string TypeName() {
return "std::uint16_t"; }
179 void AcceptVisitor(Detail::RFieldVisitor &visitor)
const final;
182extern template class RSimpleField<std::int32_t>;
187 const RColumnRepresentations &GetColumnRepresentations() const final;
190 static std::
string TypeName() {
return "std::int32_t"; }
196 void AcceptVisitor(Detail::RFieldVisitor &visitor)
const final;
199extern template class RSimpleField<std::uint32_t>;
204 const RColumnRepresentations &GetColumnRepresentations() const final;
207 static std::
string TypeName() {
return "std::uint32_t"; }
213 void AcceptVisitor(Detail::RFieldVisitor &visitor)
const final;
216extern template class RSimpleField<std::int64_t>;
221 const RColumnRepresentations &GetColumnRepresentations() const final;
224 static std::
string TypeName() {
return "std::int64_t"; }
230 void AcceptVisitor(Detail::RFieldVisitor &visitor)
const final;
233extern template class RSimpleField<std::uint64_t>;
238 const RColumnRepresentations &GetColumnRepresentations() const final;
241 static std::
string TypeName() {
return "std::uint64_t"; }
247 void AcceptVisitor(Detail::RFieldVisitor &visitor)
const final;
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));
314class RField<T, typename std::enable_if<std::is_integral_v<T>>
::type> final
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");
322 std::unique_ptr<RFieldBase>
CloneImpl(std::string_view newName)
const final
324 return std::make_unique<RField>(newName);
333 T *Map(
NTupleSize_t globalIndex) {
return reinterpret_cast<T *
>(this->BaseType::Map(globalIndex)); }
334 T *
Map(RClusterIndex clusterIndex) {
return reinterpret_cast<T *
>(this->BaseType::Map(clusterIndex)); }
337 return reinterpret_cast<T *
>(this->BaseType::MapV(globalIndex, nItems));
341 return reinterpret_cast<T *
>(this->BaseType::MapV(clusterIndex, nItems));
349extern template class RSimpleField<float>;
353 std::size_t fBitWidth =
sizeof(float) * 8;
354 double fValueMin = std::numeric_limits<float>::min();
355 double fValueMax = std::numeric_limits<float>::max();
358 std::unique_ptr<RFieldBase>
CloneImpl(std::string_view newName)
const final
360 auto cloned = std::make_unique<RField<float>>(newName);
361 cloned->fBitWidth = fBitWidth;
362 cloned->fValueMin = fValueMin;
363 cloned->fValueMax = fValueMax;
367 const RColumnRepresentations &GetColumnRepresentations() const final;
369 void GenerateColumns() final;
373 static std::
string TypeName() {
return "float"; }
383 void SetHalfPrecision();
389 void SetTruncated(std::size_t nBits);
394 void SetQuantized(
float minValue,
float maxValue, std::size_t nBits);
402 std::unique_ptr<RFieldBase>
CloneImpl(std::string_view newName)
const final
404 return std::make_unique<RField>(newName);
407 const RColumnRepresentations &GetColumnRepresentations() const final;
410 static std::
string TypeName() {
return "double"; }
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.
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
A field translates read and write calls from/to underlying columns to/from tree values.
RField(std::string_view name)
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
~RField() override=default
RField(RField &&other)=default
RField & operator=(RField &&other)=default
RField(std::string_view name)
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() override=default
RField(std::string_view name)
~RField() override=default
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(std::string_view name)
RField & operator=(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() override=default
RField(const RField &)=delete
static std::string TypeName()
RField & operator=(const RField &)=delete
Classes with dictionaries that can be inspected by TClass.
RField & operator=(RField &&other)=default
~RField() override=default
The on-storage meta-data of an ntuple.
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.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
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