SPH
Public Member Functions | Static Public Member Functions | List of all members
Tuple< TArgs > Class Template Reference

Heterogeneous container capable of storing a fixed number of values. More...

#include <Tuple.h>

Inheritance diagram for Tuple< TArgs >:
Detail::TupleImpl< std::index_sequence_for< TArgs... >, TArgs... >

Public Member Functions

constexpr INLINE Tuple ()=default
 
template<typename... Ts, typename = std::enable_if_t<AllTrue<std::is_constructible<TArgs, Ts>::value...>::value>>
constexpr INLINE Tuple (Ts &&... args)
 
constexpr INLINE Tuple (const Tuple &other)
 
constexpr INLINE Tuple (Tuple &&other)
 
template<typename... Ts>
constexpr INLINE Tuple (const Tuple< Ts... > &other)
 
template<typename... Ts>
constexpr INLINE Tuple (Tuple< Ts... > &&other)
 
INLINE Tupleoperator= (Tuple &other)
 
INLINE Tupleoperator= (const Tuple &other)
 Assign conts l-value reference of tuple. All values are copied. More...
 
INLINE Tupleoperator= (Tuple &&other)
 
template<typename... Ts>
INLINE Tupleoperator= (Tuple< Ts... > &other)
 Assigns tuple of generally different types. Same rules as above apply. More...
 
template<typename... Ts>
INLINE Tupleoperator= (const Tuple< Ts... > &other)
 Assigns tuple of generally different types. Same rules as above apply. More...
 
template<typename... Ts>
INLINE Tupleoperator= (Tuple< Ts... > &&other)
 Assigns tuple of generally different types. Same rules as above apply. More...
 
template<std::size_t TIndex>
constexpr decltype(auto) INLINE get () &
 
template<std::size_t TIndex>
constexpr decltype(auto) INLINE get () const &
 Returns an element of the tuple by index, const version. More...
 
template<std::size_t TIndex>
constexpr decltype(auto) INLINE get () &&
 
template<typename Type >
constexpr decltype(auto) INLINE get () &
 
template<typename Type >
constexpr decltype(auto) INLINE get () const &
 Returns an element of the tuple by type, const version. More...
 
template<typename Type >
constexpr decltype(auto) INLINE get () &&
 Returns an element of r-value reference to tuple. Same rules apply as for other overloads. More...
 
constexpr INLINE bool operator== (const Tuple &other) const
 
constexpr INLINE bool operator!= (const Tuple &other) const
 

Static Public Member Functions

static constexpr INLINE std::size_t size () noexcept
 Returns the number of elements in tuple. More...
 

Detailed Description

template<typename... TArgs>
class Tuple< TArgs >

Heterogeneous container capable of storing a fixed number of values.

Can store any copy-constructible or move-constructible type, l-value references and r-value reference. Empty tuples are allowed. Only tuples of size 1 containing other tuple are forbidden, for simplicity.

Definition at line 146 of file Tuple.h.

Constructor & Destructor Documentation

◆ Tuple() [1/6]

template<typename... TArgs>
constexpr INLINE Tuple< TArgs >::Tuple ( )
constexprdefault

◆ Tuple() [2/6]

template<typename... TArgs>
template<typename... Ts, typename = std::enable_if_t<AllTrue<std::is_constructible<TArgs, Ts>::value...>::value>>
constexpr INLINE Tuple< TArgs >::Tuple ( Ts &&...  args)
inlineconstexpr

Definition at line 156 of file Tuple.h.

◆ Tuple() [3/6]

template<typename... TArgs>
constexpr INLINE Tuple< TArgs >::Tuple ( const Tuple< TArgs > &  other)
inlineconstexpr

Definition at line 159 of file Tuple.h.

◆ Tuple() [4/6]

template<typename... TArgs>
constexpr INLINE Tuple< TArgs >::Tuple ( Tuple< TArgs > &&  other)
inlineconstexpr

Definition at line 162 of file Tuple.h.

◆ Tuple() [5/6]

template<typename... TArgs>
template<typename... Ts>
constexpr INLINE Tuple< TArgs >::Tuple ( const Tuple< Ts... > &  other)
inlineconstexpr

Definition at line 166 of file Tuple.h.

◆ Tuple() [6/6]

template<typename... TArgs>
template<typename... Ts>
constexpr INLINE Tuple< TArgs >::Tuple ( Tuple< Ts... > &&  other)
inlineconstexpr

Definition at line 170 of file Tuple.h.

Member Function Documentation

◆ get() [1/6]

template<typename... TArgs>
template<std::size_t TIndex>
constexpr decltype(auto) INLINE Tuple< TArgs >::get ( ) &
inlineconstexpr

Returns an element of the tuple by index. If a value or l-value reference is stored, an l-value reference to the element is returned. If an r-value references is stored, r-value reference is returned.

Definition at line 221 of file Tuple.h.

◆ get() [2/6]

template<typename... TArgs>
template<typename Type >
constexpr decltype(auto) INLINE Tuple< TArgs >::get ( ) &
inlineconstexpr

Returns an element of the tuple by type. If the tuple contains more elements of the same type, the first one is returned. The rules for l/r-value reference are same as for returning by index.

Definition at line 245 of file Tuple.h.

◆ get() [3/6]

template<typename... TArgs>
template<std::size_t TIndex>
constexpr decltype(auto) INLINE Tuple< TArgs >::get ( ) &&
inlineconstexpr

Returns an element of r-value reference to tuple by index. If a value or r-value reference is stored, an r-value reference is returned, for stored l-value reference, l-value reference is returned (same logic as in std::forward).

Definition at line 237 of file Tuple.h.

◆ get() [4/6]

template<typename... TArgs>
template<typename Type >
constexpr decltype(auto) INLINE Tuple< TArgs >::get ( ) &&
inlineconstexpr

Returns an element of r-value reference to tuple. Same rules apply as for other overloads.

Definition at line 261 of file Tuple.h.

◆ get() [5/6]

template<typename... TArgs>
template<std::size_t TIndex>
constexpr decltype(auto) INLINE Tuple< TArgs >::get ( ) const &
inlineconstexpr

Returns an element of the tuple by index, const version.

Definition at line 228 of file Tuple.h.

◆ get() [6/6]

template<typename... TArgs>
template<typename Type >
constexpr decltype(auto) INLINE Tuple< TArgs >::get ( ) const &
inlineconstexpr

Returns an element of the tuple by type, const version.

Definition at line 253 of file Tuple.h.

◆ operator!=()

template<typename... TArgs>
constexpr INLINE bool Tuple< TArgs >::operator!= ( const Tuple< TArgs > &  other) const
inlineconstexpr

Definition at line 277 of file Tuple.h.

◆ operator=() [1/6]

template<typename... TArgs>
INLINE Tuple& Tuple< TArgs >::operator= ( const Tuple< TArgs > &  other)
inline

Assign conts l-value reference of tuple. All values are copied.

Definition at line 181 of file Tuple.h.

◆ operator=() [2/6]

template<typename... TArgs>
template<typename... Ts>
INLINE Tuple& Tuple< TArgs >::operator= ( const Tuple< Ts... > &  other)
inline

Assigns tuple of generally different types. Same rules as above apply.

Definition at line 203 of file Tuple.h.

◆ operator=() [3/6]

template<typename... TArgs>
INLINE Tuple& Tuple< TArgs >::operator= ( Tuple< TArgs > &&  other)
inline

Assign conts l-value reference of tuple. If rhs contains l-value references, their values are copied, otherwise values are moved.

Definition at line 188 of file Tuple.h.

◆ operator=() [4/6]

template<typename... TArgs>
INLINE Tuple& Tuple< TArgs >::operator= ( Tuple< TArgs > &  other)
inline

Assign l-value reference of tuple. If rhs contains r-value references, their values are moved, otherwise values are copied.

Definition at line 175 of file Tuple.h.

◆ operator=() [5/6]

template<typename... TArgs>
template<typename... Ts>
INLINE Tuple& Tuple< TArgs >::operator= ( Tuple< Ts... > &&  other)
inline

Assigns tuple of generally different types. Same rules as above apply.

Definition at line 211 of file Tuple.h.

◆ operator=() [6/6]

template<typename... TArgs>
template<typename... Ts>
INLINE Tuple& Tuple< TArgs >::operator= ( Tuple< Ts... > &  other)
inline

Assigns tuple of generally different types. Same rules as above apply.

Definition at line 195 of file Tuple.h.

◆ operator==()

template<typename... TArgs>
constexpr INLINE bool Tuple< TArgs >::operator== ( const Tuple< TArgs > &  other) const
inlineconstexpr
Todo:
Generalize operator to allow comparing tuples of different types.

Definition at line 273 of file Tuple.h.

◆ size()

template<typename... TArgs>
static constexpr INLINE std::size_t Tuple< TArgs >::size ( )
inlinestaticconstexprnoexcept

Returns the number of elements in tuple.

Definition at line 268 of file Tuple.h.


The documentation for this class was generated from the following file: