SPH
Classes | Namespaces | Typedefs | Functions | Variables
Tuple.h File Reference

Re-implementation of std::tuple with some additional functionality. More...

#include "common/Traits.h"

Go to the source code of this file.

Classes

class  Detail::TupleValue< TIndex, TValue >
 
class  Detail::TupleImpl< std::index_sequence< TIndices... >, TArgs... >
 
struct  IsTuple< T >
 Useful type trait, checking whether given type is a Tuple. More...
 
class  Tuple< TArgs >
 Heterogeneous container capable of storing a fixed number of values. More...
 
struct  IsTuple< Tuple< TArgs... > & >
 
struct  IsTuple< const Tuple< TArgs... > & >
 
struct  IsTuple< Tuple< TArgs... > && >
 
struct  Ignore
 Placeholder for unused variables in tieToTuple. More...
 
struct  TupleContains< TTuple, Type >
 
struct  TupleContains< Tuple< TArgs... >, Type >
 
struct  TupleElementType< Tuple< TArgs... >, TIndex >
 
struct  TupleElementType< Tuple< TArgs... > &, TIndex >
 
struct  TupleElementType< const Tuple< TArgs... > &, TIndex >
 
struct  TupleElementType< Tuple< TArgs... > &&, TIndex >
 
struct  Detail::ForEachVisitor< TFunctor, TTuple >
 
struct  Detail::ForEachIfVisitor< TFunctor, TTuple, TTrait >
 

Namespaces

 Detail
 

Typedefs

template<typename TTuple , std::size_t TIndex>
using TupleElement = typename TupleElementType< TTuple, TIndex >::Type
 

Functions

template<typename... TArgs>
INLINE auto makeTuple (TArgs &&... args)
 Creates a tuple from a pack of values, utilizing type deduction. More...
 
template<typename... TArgs>
INLINE Tuple< TArgs &... > tieToTuple (TArgs &... args)
 Creates a tuple of l-value references. Use IGNORE placeholder to omit one or more parameters. More...
 
template<typename... TArgs>
INLINE Tuple< TArgs &&... > forwardAsTuple (TArgs &&... args)
 
template<typename... Ts1, typename... Ts2, std::size_t... TIdxs>
constexpr INLINE Tuple< Ts1..., Ts2... > Detail::appendImpl (const Tuple< Ts1... > &tuple, std::index_sequence< TIdxs... >, Ts2 &&... values)
 
template<typename... Ts1, typename... Ts2, std::size_t... TIdxs>
constexpr INLINE Tuple< Ts1..., Ts2... > Detail::appendImpl (Tuple< Ts1... > &&tuple, std::index_sequence< TIdxs... >, Ts2 &&... values)
 
template<typename... Ts1, typename... Ts2, std::size_t... TIdxs1, std::size_t... TIdxs2>
constexpr INLINE Tuple< Ts1..., Ts2... > Detail::appendImpl (const Tuple< Ts1... > &t1, const Tuple< Ts2... > &t2, std::index_sequence< TIdxs1... >, std::index_sequence< TIdxs2... >)
 
template<typename... Ts1, typename... Ts2>
constexpr INLINE Tuple< Ts1..., Ts2... > append (const Tuple< Ts1... > &tuple, Ts2 &&... values)
 
template<typename... Ts1, typename... Ts2>
constexpr INLINE Tuple< Ts1..., Ts2... > append (Tuple< Ts1... > &&tuple, Ts2 &&... values)
 Creates a tuple by moving elements of existing tuple and appending pack of values. More...
 
template<typename... Ts1, typename... Ts2>
constexpr INLINE Tuple< Ts1..., Ts2... > append (const Tuple< Ts1... > &t1, const Tuple< Ts2... > &t2)
 Creates elements of two tuples. More...
 
template<typename TFunctor , typename... TArgs>
INLINE void forEach (Tuple< TArgs... > &tuple, TFunctor &&functor)
 
template<typename TFunctor , typename... TArgs>
INLINE void forEach (const Tuple< TArgs... > &tuple, TFunctor &&functor)
 For loop to iterate over tuple, const version. More...
 
template<typename TFunctor , typename... TArgs>
INLINE void forEach (Tuple< TArgs... > &&tuple, TFunctor &&functor)
 For loop to iterate over r-value reference of tuple. Values are moved into the functor. More...
 
template<template< class T > class TTrait, typename TFunctor , typename... TArgs>
INLINE void forEachIf (Tuple< TArgs... > &tuple, TFunctor &&functor)
 Iterates over elements of the tuple and executes a functor if given type traits has value == true. More...
 
template<template< class T > class TTrait, typename TFunctor , typename... TArgs>
INLINE void forEachIf (const Tuple< TArgs... > &tuple, TFunctor &&functor)
 
template<typename TFunctor , typename TTuple , std::size_t... TIndices>
decltype(auto) INLINE Detail::applyImpl (TTuple &&tuple, TFunctor &&functor, std::index_sequence< TIndices... >)
 
template<typename TFunctor , typename... TArgs>
decltype(auto) INLINE apply (Tuple< TArgs... > &tuple, TFunctor &&functor)
 Expands arguments stored in tuple into parameter pack of a functor. More...
 
template<typename TFunctor , typename... TArgs>
decltype(auto) INLINE apply (const Tuple< TArgs... > &tuple, TFunctor &&functor)
 Expands arguments stored in tuple into parameter pack of a functor, const version. More...
 
template<typename TFunctor , typename... TArgs>
decltype(auto) INLINE apply (Tuple< TArgs... > &&tuple, TFunctor &&functor)
 Expands arguments stored in r-value reference of tuple into parameter pack of a functor. More...
 

Variables

const struct Ignore IGNORE
 

Detailed Description

Re-implementation of std::tuple with some additional functionality.

Author
Pavel Sevecek (sevecek at sirrah.troja.mff.cuni.cz)
Date
2016-2021

Definition in file Tuple.h.

Typedef Documentation

◆ TupleElement

template<typename TTuple , std::size_t TIndex>
using TupleElement = typename TupleElementType<TTuple, TIndex>::Type

Definition at line 400 of file Tuple.h.

Function Documentation

◆ append() [1/3]

template<typename... Ts1, typename... Ts2>
constexpr INLINE Tuple<Ts1..., Ts2...> append ( const Tuple< Ts1... > &  t1,
const Tuple< Ts2... > &  t2 
)
constexpr

Creates elements of two tuples.

Definition at line 364 of file Tuple.h.

◆ append() [2/3]

template<typename... Ts1, typename... Ts2>
constexpr INLINE Tuple<Ts1..., Ts2...> append ( const Tuple< Ts1... > &  tuple,
Ts2 &&...  values 
)
constexpr

Creates a tuple by appending values into an existing tuple. If the input tuple contains l-value references, only the reference is copied, otherwise elements of new tuple are copy-constructed.

Definition at line 351 of file Tuple.h.

◆ append() [3/3]

template<typename... Ts1, typename... Ts2>
constexpr INLINE Tuple<Ts1..., Ts2...> append ( Tuple< Ts1... > &&  tuple,
Ts2 &&...  values 
)
constexpr

Creates a tuple by moving elements of existing tuple and appending pack of values.

Definition at line 357 of file Tuple.h.

◆ apply() [1/3]

template<typename TFunctor , typename... TArgs>
decltype(auto) INLINE apply ( const Tuple< TArgs... > &  tuple,
TFunctor &&  functor 
)

Expands arguments stored in tuple into parameter pack of a functor, const version.

Definition at line 486 of file Tuple.h.

◆ apply() [2/3]

template<typename TFunctor , typename... TArgs>
decltype(auto) INLINE apply ( Tuple< TArgs... > &&  tuple,
TFunctor &&  functor 
)

Expands arguments stored in r-value reference of tuple into parameter pack of a functor.

Definition at line 492 of file Tuple.h.

◆ apply() [3/3]

template<typename TFunctor , typename... TArgs>
decltype(auto) INLINE apply ( Tuple< TArgs... > &  tuple,
TFunctor &&  functor 
)

Expands arguments stored in tuple into parameter pack of a functor.

Definition at line 480 of file Tuple.h.

◆ forEach() [1/3]

template<typename TFunctor , typename... TArgs>
INLINE void forEach ( const Tuple< TArgs... > &  tuple,
TFunctor &&  functor 
)

For loop to iterate over tuple, const version.

Definition at line 440 of file Tuple.h.

◆ forEach() [2/3]

template<typename TFunctor , typename... TArgs>
INLINE void forEach ( Tuple< TArgs... > &&  tuple,
TFunctor &&  functor 
)

For loop to iterate over r-value reference of tuple. Values are moved into the functor.

Definition at line 447 of file Tuple.h.

◆ forEach() [3/3]

template<typename TFunctor , typename... TArgs>
INLINE void forEach ( Tuple< TArgs... > &  tuple,
TFunctor &&  functor 
)

For loop to iterate over tuple. The functor must be a generic lambda or have overloaded operators() for all types stored within tuple.

Definition at line 433 of file Tuple.h.

◆ forEachIf() [1/2]

template<template< class T > class TTrait, typename TFunctor , typename... TArgs>
INLINE void forEachIf ( const Tuple< TArgs... > &  tuple,
TFunctor &&  functor 
)

Iterates over elements of the tuple and executes a functor if given type traits has value == true, const version.

Definition at line 464 of file Tuple.h.

◆ forEachIf() [2/2]

template<template< class T > class TTrait, typename TFunctor , typename... TArgs>
INLINE void forEachIf ( Tuple< TArgs... > &  tuple,
TFunctor &&  functor 
)

Iterates over elements of the tuple and executes a functor if given type traits has value == true.

Definition at line 455 of file Tuple.h.

◆ forwardAsTuple()

template<typename... TArgs>
INLINE Tuple<TArgs&&...> forwardAsTuple ( TArgs &&...  args)

Creates a tuple of l-value or r-value references, following perfect forwarding semantics. Value returned from tuple using get() will then have the same type as the input parameter. Same goes for values passed into forEach functor.

Definition at line 312 of file Tuple.h.

◆ makeTuple()

template<typename... TArgs>
INLINE auto makeTuple ( TArgs &&...  args)

Creates a tuple from a pack of values, utilizing type deduction.

Definition at line 298 of file Tuple.h.

◆ tieToTuple()

template<typename... TArgs>
INLINE Tuple<TArgs&...> tieToTuple ( TArgs &...  args)

Creates a tuple of l-value references. Use IGNORE placeholder to omit one or more parameters.

Definition at line 304 of file Tuple.h.

Variable Documentation

◆ IGNORE

const struct Ignore IGNORE