16#ifndef ROOT_RNTupleJoinTable
17#define ROOT_RNTupleJoinTable
23#include <unordered_map>
27namespace Experimental {
112 std::size_t seed = 0;
119 inline std::size_t
mix(std::size_t init)
const
122 init *= 0xe9846af9b1a615d;
124 init *= 0xe9846af9b1a615d;
132 std::unordered_map<RCombinedJoinFieldValue, std::vector<ROOT::NTupleSize_t>, RCombinedJoinFieldValueHash>
158 std::unordered_map<PartitionKey_t, std::vector<std::unique_ptr<REntryMapping>>>
fPartitions;
181 static std::unique_ptr<RNTupleJoinTable>
Create(
const std::vector<std::string> &
joinFieldNames);
203 std::vector<ROOT::NTupleSize_t>
214 std::unordered_map<PartitionKey_t, std::vector<ROOT::NTupleSize_t>>
225 std::unordered_map<PartitionKey_t, std::vector<ROOT::NTupleSize_t>>
Provides a mapping from one or several join field values to an entry index.
std::vector< std::size_t > fJoinFieldValueSizes
The size (in bytes) for each join field, corresponding to fJoinFieldNames.
std::vector< std::string > fJoinFieldNames
Names of the join fields used for the mapping to their respective entry indexes.
REntryMapping(ROOT::Internal::RPageSource &pageSource, const std::vector< std::string > &joinFieldNames)
Create a new entry mapping.
std::unordered_map< RCombinedJoinFieldValue, std::vector< ROOT::NTupleSize_t >, RCombinedJoinFieldValueHash > fMapping
The mapping itself.
const std::vector< ROOT::NTupleSize_t > * GetEntryIndexes(std::vector< void * > valuePtrs) const
Get the entry indexes for this entry mapping.
Builds a join table on one or several fields of an RNTuple so it can be joined onto other RNTuples.
std::unordered_map< PartitionKey_t, std::vector< ROOT::NTupleSize_t > > GetPartitionedEntryIndexes(const std::vector< void * > &valuePtrs, const std::vector< PartitionKey_t > &partitionKeys) const
Get all entry indexes for the given join field value(s) for a specific set of partitions.
RNTupleJoinTable(RNTupleJoinTable &&other)=delete
std::vector< ROOT::NTupleSize_t > GetEntryIndexes(const std::vector< void * > &valuePtrs, PartitionKey_t partitionKey=kDefaultPartitionKey) const
Get all entry indexes for the given join field value(s) within a partition.
RNTupleJoinTable & operator=(RNTupleJoinTable &&other)=delete
RNTupleJoinTable & Add(ROOT::Internal::RPageSource &pageSource, PartitionKey_t partitionKey=kDefaultPartitionKey)
Add an entry mapping to the join table.
RNTupleJoinTable & operator=(const RNTupleJoinTable &other)=delete
~RNTupleJoinTable()=default
static std::unique_ptr< RNTupleJoinTable > Create(const std::vector< std::string > &joinFieldNames)
Create an RNTupleJoinTable from an existing RNTuple.
std::vector< std::string > fJoinFieldNames
Names of the join fields used for the mapping to their respective entry indexes.
std::uint64_t PartitionKey_t
std::uint64_t JoinValue_t
RNTupleJoinTable(const RNTupleJoinTable &other)=delete
RNTupleJoinTable(const std::vector< std::string > &joinFieldNames)
Create an a new RNTupleJoinTable for the RNTuple represented by the provided page source.
static constexpr PartitionKey_t kDefaultPartitionKey
std::unordered_map< PartitionKey_t, std::vector< std::unique_ptr< REntryMapping > > > fPartitions
Partitions of one or multiple entry mappings.
Abstract interface to read data from an ntuple.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
Hash combining the individual join field value hashes from RCombinedJoinFieldValue.
std::size_t mix(std::size_t init) const
std::size_t operator()(const RCombinedJoinFieldValue &joinFieldVal) const
Container for the combined hashes of join field values.
bool operator==(const RCombinedJoinFieldValue &other) const
std::vector< JoinValue_t > fJoinFieldValues
RCombinedJoinFieldValue(const std::vector< JoinValue_t > &joinFieldValues)