RAJA
RAJA provides a collection of platform portability abstractions for C++ HPC applications.
Public Types | Public Member Functions | Friends | List of all members
RAJA::zip_tuple< is_val, Ts > Struct Template Reference

Tuple used by ZipIterator for storing multiple references and values. Acts like a reference to its members allowing copy/move construction/assignment based on the reference type of the zip_tuple. More...

#include <zip_tuple.hpp>

Public Types

using value_type = RAJA::tuple< Ts... >
 
template<typename T >
using opp_type = typename std::conditional< is_val, typename std::add_lvalue_reference< T >::type, typename std::remove_reference< T >::type >::type
 
using opp_tuple = zip_tuple<!is_val, opp_type< Ts >... >
 
using IdxSeq = camp::make_idx_seq_t< sizeof...(Ts)>
 

Public Member Functions

template<typename... Os, typename = concepts::enable_if<type_traits::convertible_to<Os&&, Ts>...>>
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple (Os &&... os)
 
template<typename... Os, typename = concepts::enable_if<type_traits::convertible_to< Os&&, typename std::remove_reference<Ts>::type>...>>
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tupleassign (Os &&... os)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple (zip_tuple &o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple (zip_tuple const &o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple (zip_tuple &&o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tupleoperator= (zip_tuple &o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tupleoperator= (zip_tuple const &o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tupleoperator= (zip_tuple &&o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple (opp_tuple &o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple (opp_tuple const &o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple (opp_tuple &&o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tupleoperator= (opp_tuple &o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tupleoperator= (opp_tuple const &o)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tupleoperator= (opp_tuple &&o)
 
template<camp::idx_t I>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::tuple_element_t< I, value_type > & get () &noexcept
 
template<camp::idx_t I>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::tuple_element_t< I, value_type > const & get () const &noexcept
 
template<camp::idx_t I>
RAJA_HOST_DEVICE constexpr RAJA_INLINE std::remove_reference_t< RAJA::tuple_element_t< I, value_type > > && get () &&noexcept
 
template<camp::idx_t I>
RAJA_HOST_DEVICE constexpr RAJA_INLINE std::remove_reference_t< RAJA::tuple_element_t< I, value_type > > const && get () const &&noexcept
 

Friends

RAJA_HOST_DEVICE constexpr RAJA_INLINE friend void safe_swap (zip_tuple &lhs, zip_tuple &rhs)
 
RAJA_HOST_DEVICE constexpr RAJA_INLINE friend void safe_swap (zip_tuple &lhs, opp_tuple &rhs)
 
std::ostream & operator<< (std::ostream &o, zip_tuple const &v)
 

Detailed Description

template<bool is_val, typename... Ts>
struct RAJA::zip_tuple< is_val, Ts >

Tuple used by ZipIterator for storing multiple references and values. Acts like a reference to its members allowing copy/move construction/assignment based on the reference type of the zip_tuple.

Member Typedef Documentation

◆ value_type

template<bool is_val, typename... Ts>
using RAJA::zip_tuple< is_val, Ts >::value_type = RAJA::tuple<Ts...>

◆ opp_type

template<bool is_val, typename... Ts>
template<typename T >
using RAJA::zip_tuple< is_val, Ts >::opp_type = typename std::conditional<is_val, typename std::add_lvalue_reference<T>::type, typename std::remove_reference<T>::type>::type

◆ opp_tuple

template<bool is_val, typename... Ts>
using RAJA::zip_tuple< is_val, Ts >::opp_tuple = zip_tuple<!is_val, opp_type<Ts>...>

◆ IdxSeq

template<bool is_val, typename... Ts>
using RAJA::zip_tuple< is_val, Ts >::IdxSeq = camp::make_idx_seq_t<sizeof...(Ts)>

Constructor & Destructor Documentation

◆ zip_tuple() [1/7]

template<bool is_val, typename... Ts>
template<typename... Os, typename = concepts::enable_if<type_traits::convertible_to<Os&&, Ts>...>>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::zip_tuple< is_val, Ts >::zip_tuple ( Os &&...  os)
inlineconstexpr

◆ zip_tuple() [2/7]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::zip_tuple< is_val, Ts >::zip_tuple ( zip_tuple< is_val, Ts > &  o)
inlineconstexpr

◆ zip_tuple() [3/7]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::zip_tuple< is_val, Ts >::zip_tuple ( zip_tuple< is_val, Ts > const &  o)
inlineconstexpr

◆ zip_tuple() [4/7]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::zip_tuple< is_val, Ts >::zip_tuple ( zip_tuple< is_val, Ts > &&  o)
inlineconstexpr

◆ zip_tuple() [5/7]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::zip_tuple< is_val, Ts >::zip_tuple ( opp_tuple o)
inlineconstexpr

◆ zip_tuple() [6/7]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::zip_tuple< is_val, Ts >::zip_tuple ( opp_tuple const &  o)
inlineconstexpr

◆ zip_tuple() [7/7]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::zip_tuple< is_val, Ts >::zip_tuple ( opp_tuple &&  o)
inlineconstexpr

Member Function Documentation

◆ assign()

template<bool is_val, typename... Ts>
template<typename... Os, typename = concepts::enable_if<type_traits::convertible_to< Os&&, typename std::remove_reference<Ts>::type>...>>
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple& RAJA::zip_tuple< is_val, Ts >::assign ( Os &&...  os)
inlineconstexpr

◆ operator=() [1/6]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple& RAJA::zip_tuple< is_val, Ts >::operator= ( zip_tuple< is_val, Ts > &  o)
inlineconstexpr

◆ operator=() [2/6]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple& RAJA::zip_tuple< is_val, Ts >::operator= ( zip_tuple< is_val, Ts > const &  o)
inlineconstexpr

◆ operator=() [3/6]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple& RAJA::zip_tuple< is_val, Ts >::operator= ( zip_tuple< is_val, Ts > &&  o)
inlineconstexpr

◆ operator=() [4/6]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple& RAJA::zip_tuple< is_val, Ts >::operator= ( opp_tuple o)
inlineconstexpr

◆ operator=() [5/6]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple& RAJA::zip_tuple< is_val, Ts >::operator= ( opp_tuple const &  o)
inlineconstexpr

◆ operator=() [6/6]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE zip_tuple& RAJA::zip_tuple< is_val, Ts >::operator= ( opp_tuple &&  o)
inlineconstexpr

◆ get() [1/4]

template<bool is_val, typename... Ts>
template<camp::idx_t I>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::tuple_element_t<I, value_type>& RAJA::zip_tuple< is_val, Ts >::get ( ) &
inlineconstexprnoexcept

◆ get() [2/4]

template<bool is_val, typename... Ts>
template<camp::idx_t I>
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA:: tuple_element_t<I, value_type> const& RAJA::zip_tuple< is_val, Ts >::get ( ) const &
inlineconstexprnoexcept

◆ get() [3/4]

template<bool is_val, typename... Ts>
template<camp::idx_t I>
RAJA_HOST_DEVICE constexpr RAJA_INLINE std::remove_reference_t< RAJA::tuple_element_t<I, value_type> >&& RAJA::zip_tuple< is_val, Ts >::get ( ) &&
inlineconstexprnoexcept

◆ get() [4/4]

template<bool is_val, typename... Ts>
template<camp::idx_t I>
RAJA_HOST_DEVICE constexpr RAJA_INLINE std::remove_reference_t< RAJA::tuple_element_t<I, value_type> > const&& RAJA::zip_tuple< is_val, Ts >::get ( ) const &&
inlineconstexprnoexcept

Friends And Related Function Documentation

◆ safe_swap [1/2]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE friend void safe_swap ( zip_tuple< is_val, Ts > &  lhs,
zip_tuple< is_val, Ts > &  rhs 
)
friend

◆ safe_swap [2/2]

template<bool is_val, typename... Ts>
RAJA_HOST_DEVICE constexpr RAJA_INLINE friend void safe_swap ( zip_tuple< is_val, Ts > &  lhs,
opp_tuple rhs 
)
friend

◆ operator<<

template<bool is_val, typename... Ts>
std::ostream& operator<< ( std::ostream &  o,
zip_tuple< is_val, Ts > const &  v 
)
friend

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