16#ifndef ROOT7_RField_Record 
   17#define ROOT7_RField_Record 
   20#error "Please include RField.hxx!" 
   33namespace Experimental {
 
   82      for (
unsigned i = 0; i < 
N; ++i) {
 
 
 
  120              const std::array<std::size_t, 2> &offsets);
 
 
  129template <
typename T1, 
typename T2>
 
  131   using ContainerT = 
typename std::pair<T1, T2>;
 
  134   static std::array<std::unique_ptr<RFieldBase>, 2> BuildItemFields()
 
  136      return {std::make_unique<RField<T1>>(
"_0"), std::make_unique<
RField<T2>>(
"_1")};
 
  139   static std::array<std::size_t, 2> BuildItemOffsets()
 
  141      auto pair = ContainerT();
 
  142      auto offsetFirst = 
reinterpret_cast<std::uintptr_t
>(&(pair.first)) - 
reinterpret_cast<std::uintptr_t
>(&pair);
 
  143      auto offsetSecond = 
reinterpret_cast<std::uintptr_t
>(&(pair.second)) - 
reinterpret_cast<std::uintptr_t
>(&pair);
 
  149   explicit RField(std::string_view 
name) : RPairField(
name, BuildItemFields(), BuildItemOffsets())
 
  170               const std::vector<std::size_t> &offsets);
 
 
  179template <
typename... 
ItemTs>
 
  181   using ContainerT = 
typename std::tuple<
ItemTs...>;
 
  185   static std::string BuildItemTypes()
 
  188      if constexpr (
sizeof...(TailTs) > 0)
 
  194   static void _BuildItemFields(std::vector<std::unique_ptr<RFieldBase>> &
itemFields, 
unsigned int index = 0)
 
  197      if constexpr (
sizeof...(TailTs) > 0)
 
  200   static std::vector<std::unique_ptr<RFieldBase>> BuildItemFields()
 
  202      std::vector<std::unique_ptr<RFieldBase>> 
result;
 
  207   template <
unsigned Index, 
typename HeadT, 
typename... 
TailTs>
 
  208   static void _BuildItemOffsets(std::vector<std::size_t> &offsets, 
const ContainerT &
tuple)
 
  211         reinterpret_cast<std::uintptr_t
>(&std::get<Index>(
tuple)) - 
reinterpret_cast<std::uintptr_t
>(&
tuple);
 
  212      offsets.emplace_back(
offset);
 
  213      if constexpr (
sizeof...(TailTs) > 0)
 
  214         _BuildItemOffsets<Index + 1, 
TailTs...>(offsets, 
tuple);
 
  216   static std::vector<std::size_t> BuildItemOffsets()
 
  218      std::vector<std::size_t> 
result;
 
  224   static std::string 
TypeName() { 
return "std::tuple<" + BuildItemTypes<
ItemTs...>() + 
">"; }
 
  225   explicit RField(std::string_view 
name) : RTupleField(
name, BuildItemFields(), BuildItemOffsets())
 
ROOT::Experimental::RField< T > RField
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
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 offset
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 result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Abstract base class for classes implementing the visitor design pattern.
std::size_t fMaxAlignment
Addresses a column element or field item relative to a particular cluster, instead of a global NTuple...
A functor to release the memory acquired by CreateValue (memory and constructor).
Points to an object with RNTuple I/O support and keeps a pointer to the corresponding field.
A field translates read and write calls from/to underlying columns to/from tree values.
void Attach(std::unique_ptr< RFieldBase > child)
Add a new subfield to the list of nested fields.
int fTraits
Properties of the type that allow for optimizations of collections of that type.
static constexpr int kTraitTrivialType
Shorthand for types that are both trivially constructible and destructible.
Classes with dictionaries that can be inspected by TClass.
RField & operator=(RField &&other)=default
static std::string TypeName()
Template specializations for C++ std::pair.
~RPairField() override=default
RPairField(std::string_view fieldName, std::array< std::unique_ptr< RFieldBase >, 2 > itemFields, const std::array< std::size_t, 2 > &offsets)
static std::string GetTypeList(const std::array< std::unique_ptr< RFieldBase >, 2 > &itemFields)
RPairField(RPairField &&other)=default
RPairField & operator=(RPairField &&other)=default
std::vector< std::size_t > fOffsets
void operator()(void *objPtr, bool dtorOnly) final
std::vector< std::unique_ptr< RDeleter > > fItemDeleters
RRecordDeleter(std::vector< std::unique_ptr< RDeleter > > itemDeleters, const std::vector< std::size_t > &offsets)
The field for an untyped record.
std::size_t fMaxAlignment
size_t GetValueSize() const final
The number of bytes taken by a value of the appropriate type.
size_t GetAlignment() const final
As a rule of thumb, the alignment is equal to the size of the type.
std::vector< std::size_t > fOffsets
std::unique_ptr< RFieldBase > CloneImpl(std::string_view newName) const final
Called by Clone(), which additionally copies the on-disk ID.
void ReadInClusterImpl(RClusterIndex clusterIndex, void *to) final
RRecordField(RRecordField &&other)=default
RRecordField(std::string_view name, const RRecordField &source)
void ReadGlobalImpl(NTupleSize_t globalIndex, void *to) final
std::vector< RValue > SplitValue(const RValue &value) const final
Creates the list of direct child values given a value for this field.
std::size_t GetItemPadding(std::size_t baseOffset, std::size_t itemAlignment) const
std::unique_ptr< RDeleter > GetDeleter() const final
~RRecordField() override=default
std::size_t AppendImpl(const void *from) final
Operations on values of complex types, e.g.
const std::vector< std::size_t > & GetOffsets() const
RRecordField & operator=(RRecordField &&other)=default
void AcceptVisitor(Detail::RFieldVisitor &visitor) const final
void ConstructValue(void *where) const final
Constructs value in a given location of size at least GetValueSize(). Called by the base class' Creat...
void AttachItemFields(std::vector< std::unique_ptr< RFieldBase > > itemFields)
Template specializations for C++ std::tuple.
RTupleField & operator=(RTupleField &&other)=default
static std::string GetTypeList(const std::vector< std::unique_ptr< RFieldBase > > &itemFields)
~RTupleField() override=default
RTupleField(RTupleField &&other)=default
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...