16#ifndef ROOT7_RNTupleView
17#define ROOT7_RNTupleView
26#include <unordered_map>
29namespace Experimental {
44 class RIterator :
public std::iterator<std::forward_iterator_tag, NTupleSize_t> {
80 class RIterator :
public std::iterator<std::forward_iterator_tag, RClusterIndex> {
136 :
fField(pageSource->GetDescriptor().GetFieldDescriptor(fieldId).GetFieldName()),
fValue(
fField.GenerateValue())
139 std::unordered_map<const Detail::RFieldBase *, DescriptorId_t> field2Id;
140 field2Id[&
fField] = fieldId;
144 field2Id[&
f] = subFieldId;
176 :
fField(pageSource->GetDescriptor().GetFieldDescriptor(fieldId).GetFieldName())
201 :
fField(pageSource->GetDescriptor().GetFieldDescriptor(fieldId).GetFieldName())
219class RNTupleView<std::int32_t> {
224 RField<std::int32_t>
fField;
226 :
fField(pageSource->GetDescriptor().GetFieldDescriptor(fieldId).GetFieldName())
239 std::int32_t
operator()(
const RClusterIndex &clusterIndex) {
return *
fField.Map(clusterIndex); }
250 :
fField(pageSource->GetDescriptor().GetFieldDescriptor(fieldId).GetFieldName())
309 template <
typename T>
static void Connect(DescriptorId_t fieldId, RPageStorage &pageStorage, RFieldBase &field)
Abstract interface to read data from an ntuple.
const RNTupleDescriptor & GetDescriptor() const
Addresses a column element or field item relative to a particular cluster, instead of a global NTuple...
DescriptorId_t GetClusterId() const
ClusterSize_t::ValueType GetIndex() const
Template specializations for concrete C++ types.
void GetCollectionInfo(NTupleSize_t globalIndex, RClusterIndex *collectionStart, ClusterSize_t *size)
Special help for offset fields.
Classes with dictionaries that can be inspected by TClass.
bool operator==(const iterator &rh) const
RIterator(const RClusterIndex &index)
bool operator!=(const iterator &rh) const
Used to loop over entries of collections in a single cluster.
const ClusterSize_t::ValueType fStart
const DescriptorId_t fClusterId
RNTupleClusterRange(DescriptorId_t clusterId, ClusterSize_t::ValueType start, ClusterSize_t::ValueType end)
const ClusterSize_t::ValueType fEnd
DescriptorId_t FindFieldId(std::string_view fieldName, DescriptorId_t parentId) const
bool operator==(const iterator &rh) const
RIterator(NTupleSize_t index)
bool operator!=(const iterator &rh) const
Used to loop over indexes (entries or collections) between start and end.
const NTupleSize_t fStart
RNTupleGlobalRange(NTupleSize_t start, NTupleSize_t end)
An RNTuple that is used to read data from storage.
A view for a collection, that can itself generate new ntuple views for its nested fields.
RNTupleViewCollection GetViewCollection(std::string_view fieldName)
~RNTupleViewCollection()=default
RNTupleClusterRange GetViewRange(const RClusterIndex &clusterIndex)
RNTupleClusterRange GetViewRange(NTupleSize_t globalIndex)
RNTupleViewCollection(RNTupleViewCollection &&other)=default
RNTupleViewCollection & operator=(RNTupleViewCollection &&other)=default
RNTupleViewCollection & operator=(const RNTupleViewCollection &other)=delete
RNTupleViewCollection(DescriptorId_t fieldId, Detail::RPageSource *source)
ClusterSize_t operator()(const RClusterIndex &clusterIndex)
ClusterSize_t operator()(NTupleSize_t globalIndex)
RNTupleView< T > GetView(std::string_view fieldName)
Detail::RPageSource * fSource
DescriptorId_t fCollectionFieldId
RNTupleViewCollection(const RNTupleViewCollection &other)=delete
RNTupleView & operator=(const RNTupleView &other)=delete
ClusterSize_t operator()(const RClusterIndex &clusterIndex)
RNTupleView(DescriptorId_t fieldId, Detail::RPageSource *pageSource)
RNTupleView & operator=(RNTupleView &&other)=default
RNTupleView(RNTupleView &&other)=default
ClusterSize_t operator()(NTupleSize_t globalIndex)
RNTupleView(const RNTupleView &other)=delete
friend class RNTupleViewCollection
RField< ClusterSize_t > fField
RNTupleView & operator=(const RNTupleView &other)=delete
RNTupleView(RNTupleView &&other)=default
RNTupleView & operator=(RNTupleView &&other)=default
RNTupleView(const RNTupleView &other)=delete
double operator()(const RClusterIndex &clusterIndex)
double operator()(NTupleSize_t globalIndex)
RNTupleView(DescriptorId_t fieldId, Detail::RPageSource *pageSource)
float operator()(const RClusterIndex &clusterIndex)
RNTupleView(const RNTupleView &other)=delete
RNTupleView(RNTupleView &&other)=default
RNTupleView & operator=(RNTupleView &&other)=default
RNTupleView(DescriptorId_t fieldId, Detail::RPageSource *pageSource)
float operator()(NTupleSize_t globalIndex)
RNTupleView & operator=(const RNTupleView &other)=delete
An RNTupleView provides read-only access to a single field of the ntuple.
Detail::RFieldValue fValue
RNTupleView & operator=(RNTupleView &&other)=default
RNTupleView & operator=(const RNTupleView &other)=delete
RNTupleView(RNTupleView &&other)=default
RField< T > fField
fFieldId has fParent always set to null; views access nested fields without looking at the parent
const T & operator()(const RClusterIndex &clusterIndex)
RNTupleView(const RNTupleView &other)=delete
RNTupleView(DescriptorId_t fieldId, Detail::RPageSource *pageSource)
const T & operator()(NTupleSize_t globalIndex)
friend class RNTupleViewCollection
friend class RNTupleReader
basic_string_view< char > string_view
std::uint64_t NTupleSize_t
Integer type long enough to hold the maximum number of entries in a column.
std::uint64_t DescriptorId_t
Distriniguishes elements of the same type within a descriptor, e.g. different fields.
constexpr NTupleSize_t kInvalidNTupleIndex
Wrap the 32bit integer in a struct in order to avoid template specialization clash with std::uint32_t...