DPC++ Runtime
Runtime libraries for oneAPI DPC++
generic_type_traits.hpp File Reference
#include <sycl/access/access.hpp>
#include <sycl/aliases.hpp>
#include <sycl/detail/generic_type_lists.hpp>
#include <sycl/detail/helpers.hpp>
#include <sycl/detail/type_list.hpp>
#include <sycl/detail/type_traits.hpp>
#include <sycl/half_type.hpp>
#include <sycl/multi_ptr.hpp>
#include <cstddef>
#include <cstdint>
#include <limits>
#include <type_traits>
Include dependency graph for generic_type_traits.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  sycl::_V1::detail::nan_types< T, Enable >
 
struct  sycl::_V1::detail::nan_types< T, std::enable_if_t< is_contained< T, gtl::unsigned_short_list >::value, T > >
 
struct  sycl::_V1::detail::nan_types< T, std::enable_if_t< is_contained< T, gtl::unsigned_int_list >::value, T > >
 
struct  sycl::_V1::detail::nan_types< T, std::enable_if_t< is_contained< T, gtl::unsigned_long_integer_list >::value, T > >
 
struct  sycl::_V1::detail::convert_data_type_impl< T, B, Enable >
 
struct  sycl::_V1::detail::convert_data_type_impl< T, B, std::enable_if_t< is_sgentype< T >::value, T > >
 
struct  sycl::_V1::detail::convert_data_type_impl< T, B, std::enable_if_t< is_vgentype< T >::value, T > >
 
class  sycl::_V1::detail::TryToGetPointerT< T >
 
class  sycl::_V1::detail::TryToGetElementType< T >
 
class  sycl::_V1::detail::TryToGetVectorT< T >
 
class  sycl::_V1::detail::TryToGetPointerVecT< T >
 
struct  sycl::_V1::detail::PointerConverter< To >
 
struct  sycl::_V1::detail::PointerConverter< multi_ptr< ElementType, Space, DecorateAddress > >
 
struct  sycl::_V1::detail::mptr_or_vec_elem_type< T, typename >
 
struct  sycl::_V1::detail::mptr_or_vec_elem_type< multi_ptr< ElementType, Space, IsDecorated >, std::enable_if_t< IsDecorated==access::decorated::no||IsDecorated==access::decorated::yes > >
 
struct  sycl::_V1::detail::mptr_or_vec_elem_type< const multi_ptr< ElementType, Space, IsDecorated > >
 
struct  sycl::_V1::detail::select_cl_scalar_complex_or_T< T, typename >
 
struct  sycl::_V1::detail::select_cl_vector_or_scalar_or_ptr< T, Enable >
 
struct  sycl::_V1::detail::select_cl_vector_or_scalar_or_ptr< T, typename std::enable_if_t< is_vgentype< T >::value > >
 
struct  sycl::_V1::detail::select_cl_vector_or_scalar_or_ptr< T, typename std::enable_if_t<!is_vgentype< T >::value &&!std::is_pointer_v< T > > >
 
struct  sycl::_V1::detail::select_cl_vector_or_scalar_or_ptr< T, typename std::enable_if_t<!is_vgentype< T >::value &&std::is_pointer_v< T > > >
 
struct  sycl::_V1::detail::select_cl_mptr_or_vector_or_scalar_or_ptr< T, Enable >
 
struct  sycl::_V1::detail::TypeHelper< T >
 
struct  sycl::_V1::detail::TypeHelper< std::byte >
 
struct  sycl::_V1::detail::TypeHelper< const T >
 
struct  sycl::_V1::detail::TypeHelper< volatile T >
 
struct  sycl::_V1::detail::TypeHelper< const volatile T >
 
struct  sycl::_V1::detail::select_cl_mptr_or_vector_or_scalar_or_ptr< T, typename std::enable_if_t< is_genptr< T >::value &&!std::is_pointer_v< T > > >
 
struct  sycl::_V1::detail::select_cl_mptr_or_vector_or_scalar_or_ptr< T, typename std::enable_if_t<!is_genptr< T >::value||std::is_pointer_v< T > > >
 
struct  sycl::_V1::detail::Boolean< N >
 
struct  sycl::_V1::detail::TryToGetNumElements< T, Enable >
 
struct  sycl::_V1::detail::TryToGetNumElements< T, typename std::enable_if_t< TryToGetVectorT< T >::value > >
 
struct  sycl::_V1::detail::TryToGetNumElements< T, typename std::enable_if_t<!TryToGetVectorT< T >::value > >
 
struct  sycl::_V1::detail::RelationalReturnType< T >
 
struct  sycl::_V1::detail::RelationalTestForSignBitType< T >
 
struct  sycl::_V1::detail::RelConverter< T, Enable >
 
struct  sycl::_V1::detail::RelConverter< T, typename std::enable_if_t< TryToGetElementType< T >::value > >
 
struct  sycl::_V1::detail::RelConverter< T, typename std::enable_if_t<!TryToGetElementType< T >::value > >
 
class  sycl::_V1::detail::is_same_vector_size_impl< FirstSize, Args >
 
class  sycl::_V1::detail::is_same_vector_size_impl< FirstSize, T, Args... >
 
class  sycl::_V1::detail::is_same_vector_size_impl< FirstSize >
 
class  sycl::_V1::detail::is_same_vector_size< T, Args >
 

Namespaces

 sycl
 
 sycl::_V1
 
 sycl::_V1::detail
 

Typedefs

template<typename T >
using sycl::_V1::detail::is_floatn = is_contained< T, gtl::vector_float_list >
 
template<typename T >
using sycl::_V1::detail::is_genfloatf = is_contained< T, gtl::float_list >
 
template<typename T >
using sycl::_V1::detail::is_svgenfloatf = is_contained< T, gtl::scalar_vector_float_list >
 
template<typename T >
using sycl::_V1::detail::is_doublen = is_contained< T, gtl::vector_double_list >
 
template<typename T >
using sycl::_V1::detail::is_genfloatd = is_contained< T, gtl::double_list >
 
template<typename T >
using sycl::_V1::detail::is_svgenfloatd = is_contained< T, gtl::scalar_vector_double_list >
 
template<typename T >
using sycl::_V1::detail::is_halfn = is_contained< T, gtl::vector_half_list >
 
template<typename T >
using sycl::_V1::detail::is_genfloath = is_contained< T, gtl::half_list >
 
template<typename T >
using sycl::_V1::detail::is_half = is_contained< T, gtl::scalar_half_list >
 
template<typename T >
using sycl::_V1::detail::is_svgenfloath = is_contained< T, gtl::scalar_vector_half_list >
 
template<typename T >
using sycl::_V1::detail::is_genfloat = is_contained< T, gtl::floating_list >
 
template<typename T >
using sycl::_V1::detail::is_sgenfloat = is_contained< T, gtl::scalar_floating_list >
 
template<typename T >
using sycl::_V1::detail::is_vgenfloat = is_contained< T, gtl::vector_floating_list >
 
template<typename T >
using sycl::_V1::detail::is_svgenfloat = is_contained< T, gtl::scalar_vector_floating_list >
 
template<typename T >
using sycl::_V1::detail::is_mgenfloat = std::bool_constant< std::is_same_v< T, sycl::marray< marray_element_t< T >, T::size()> > &&is_svgenfloat< marray_element_t< T > >::value >
 
template<typename T >
using sycl::_V1::detail::is_gengeofloat = is_contained< T, gtl::geo_float_list >
 
template<typename T >
using sycl::_V1::detail::is_gengeodouble = is_contained< T, gtl::geo_double_list >
 
template<typename T >
using sycl::_V1::detail::is_gengeomarrayfloat = is_contained< T, gtl::marray_geo_float_list >
 
template<typename T >
using sycl::_V1::detail::is_gengeomarray = is_contained< T, gtl::marray_geo_list >
 
template<typename T >
using sycl::_V1::detail::is_gengeohalf = is_contained< T, gtl::geo_half_list >
 
template<typename T >
using sycl::_V1::detail::is_vgengeofloat = is_contained< T, gtl::vector_geo_float_list >
 
template<typename T >
using sycl::_V1::detail::is_vgengeodouble = is_contained< T, gtl::vector_geo_double_list >
 
template<typename T >
using sycl::_V1::detail::is_vgengeohalf = is_contained< T, gtl::vector_geo_half_list >
 
template<typename T >
using sycl::_V1::detail::is_sgengeo = is_contained< T, gtl::scalar_geo_list >
 
template<typename T >
using sycl::_V1::detail::is_vgengeo = is_contained< T, gtl::vector_geo_list >
 
template<typename T >
using sycl::_V1::detail::is_gencrossfloat = is_contained< T, gtl::cross_float_list >
 
template<typename T >
using sycl::_V1::detail::is_gencrossdouble = is_contained< T, gtl::cross_double_list >
 
template<typename T >
using sycl::_V1::detail::is_gencrosshalf = is_contained< T, gtl::cross_half_list >
 
template<typename T >
using sycl::_V1::detail::is_gencross = is_contained< T, gtl::cross_floating_list >
 
template<typename T >
using sycl::_V1::detail::is_gencrossmarray = is_contained< T, gtl::cross_marray_list >
 
template<typename T >
using sycl::_V1::detail::is_charn = is_contained< T, gtl::vector_default_char_list >
 
template<typename T >
using sycl::_V1::detail::is_scharn = is_contained< T, gtl::vector_signed_char_list >
 
template<typename T >
using sycl::_V1::detail::is_ucharn = is_contained< T, gtl::vector_unsigned_char_list >
 
template<typename T >
using sycl::_V1::detail::is_igenchar = is_contained< T, gtl::signed_char_list >
 
template<typename T >
using sycl::_V1::detail::is_ugenchar = is_contained< T, gtl::unsigned_char_list >
 
template<typename T >
using sycl::_V1::detail::is_genchar = is_contained< T, gtl::char_list >
 
template<typename T >
using sycl::_V1::detail::is_shortn = is_contained< T, gtl::vector_signed_short_list >
 
template<typename T >
using sycl::_V1::detail::is_genshort = is_contained< T, gtl::signed_short_list >
 
template<typename T >
using sycl::_V1::detail::is_ushortn = is_contained< T, gtl::vector_unsigned_short_list >
 
template<typename T >
using sycl::_V1::detail::is_ugenshort = is_contained< T, gtl::unsigned_short_list >
 
template<typename T >
using sycl::_V1::detail::is_uintn = is_contained< T, gtl::vector_unsigned_int_list >
 
template<typename T >
using sycl::_V1::detail::is_ugenint = is_contained< T, gtl::unsigned_int_list >
 
template<typename T >
using sycl::_V1::detail::is_intn = is_contained< T, gtl::vector_signed_int_list >
 
template<typename T >
using sycl::_V1::detail::is_genint = is_contained< T, gtl::signed_int_list >
 
template<typename T >
using sycl::_V1::detail::is_ulonglongn = is_contained< T, gtl::vector_unsigned_longlong_list >
 
template<typename T >
using sycl::_V1::detail::is_ugenlonglong = is_contained< T, gtl::unsigned_longlong_list >
 
template<typename T >
using sycl::_V1::detail::is_longlongn = is_contained< T, gtl::vector_signed_longlong_list >
 
template<typename T >
using sycl::_V1::detail::is_genlonglong = is_contained< T, gtl::signed_longlong_list >
 
template<typename T >
using sycl::_V1::detail::is_igenlonginteger = is_contained< T, gtl::signed_long_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_ugenlonginteger = is_contained< T, gtl::unsigned_long_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_geninteger = is_contained< T, gtl::integer_list >
 
template<typename T >
using sycl::_V1::detail::is_igeninteger = is_contained< T, gtl::signed_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_ugeninteger = is_contained< T, gtl::unsigned_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_sgeninteger = is_contained< T, gtl::scalar_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_vgeninteger = is_contained< T, gtl::vector_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_sigeninteger = is_contained< T, gtl::scalar_signed_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_sugeninteger = is_contained< T, gtl::scalar_unsigned_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_vigeninteger = is_contained< T, gtl::vector_signed_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_vugeninteger = is_contained< T, gtl::vector_unsigned_integer_list >
 
template<typename T >
using sycl::_V1::detail::is_genbool = is_contained< T, gtl::bool_list >
 
template<typename T >
using sycl::_V1::detail::is_gentype = is_contained< T, gtl::basic_list >
 
template<typename T >
using sycl::_V1::detail::is_vgentype = is_contained< T, gtl::vector_basic_list >
 
template<typename T >
using sycl::_V1::detail::is_sgentype = is_contained< T, gtl::scalar_basic_list >
 
template<typename T >
using sycl::_V1::detail::is_igeninteger8bit = is_gen_based_on_type_sizeof< T, 1, is_igeninteger >
 
template<typename T >
using sycl::_V1::detail::is_igeninteger16bit = is_gen_based_on_type_sizeof< T, 2, is_igeninteger >
 
template<typename T >
using sycl::_V1::detail::is_igeninteger32bit = is_gen_based_on_type_sizeof< T, 4, is_igeninteger >
 
template<typename T >
using sycl::_V1::detail::is_igeninteger64bit = is_gen_based_on_type_sizeof< T, 8, is_igeninteger >
 
template<typename T >
using sycl::_V1::detail::is_ugeninteger8bit = is_gen_based_on_type_sizeof< T, 1, is_ugeninteger >
 
template<typename T >
using sycl::_V1::detail::is_ugeninteger16bit = is_gen_based_on_type_sizeof< T, 2, is_ugeninteger >
 
template<typename T >
using sycl::_V1::detail::is_ugeninteger32bit = is_gen_based_on_type_sizeof< T, 4, is_ugeninteger >
 
template<typename T >
using sycl::_V1::detail::is_ugeninteger64bit = is_gen_based_on_type_sizeof< T, 8, is_ugeninteger >
 
template<typename T >
using sycl::_V1::detail::is_geninteger8bit = is_gen_based_on_type_sizeof< T, 1, is_geninteger >
 
template<typename T >
using sycl::_V1::detail::is_geninteger16bit = is_gen_based_on_type_sizeof< T, 2, is_geninteger >
 
template<typename T >
using sycl::_V1::detail::is_geninteger32bit = is_gen_based_on_type_sizeof< T, 4, is_geninteger >
 
template<typename T >
using sycl::_V1::detail::is_geninteger64bit = is_gen_based_on_type_sizeof< T, 8, is_geninteger >
 
template<typename T >
using sycl::_V1::detail::is_genintptr = std::bool_constant< is_pointer< T >::value &&is_genint< remove_pointer_t< T > >::value &&is_address_space_compliant< T, gvl::nonconst_address_space_list >::value >
 
template<typename T , access::address_space AddressSpace, access::decorated IsDecorated>
using sycl::_V1::detail::is_genintptr_marray = std::bool_constant< std::is_same_v< T, sycl::marray< marray_element_t< T >, T::size()> > &&is_genint< marray_element_t< remove_pointer_t< T > >>::value &&is_address_space_compliant< multi_ptr< T, AddressSpace, IsDecorated >, gvl::nonconst_address_space_list >::value &&(IsDecorated==access::decorated::yes||IsDecorated==access::decorated::no)>
 
template<typename T >
using sycl::_V1::detail::is_genfloatptr = std::bool_constant< is_pointer< T >::value &&is_genfloat< remove_pointer_t< T > >::value &&is_address_space_compliant< T, gvl::nonconst_address_space_list >::value >
 
template<typename T , access::address_space AddressSpace, access::decorated IsDecorated>
using sycl::_V1::detail::is_genfloatptr_marray = std::bool_constant< is_mgenfloat< T >::value &&is_address_space_compliant< multi_ptr< T, AddressSpace, IsDecorated >, gvl::nonconst_address_space_list >::value &&(IsDecorated==access::decorated::yes||IsDecorated==access::decorated::no)>
 
template<typename T >
using sycl::_V1::detail::is_genptr = std::bool_constant< is_pointer< T >::value &&is_gentype< remove_pointer_t< T > >::value &&is_address_space_compliant< T, gvl::nonconst_address_space_list >::value >
 
template<typename T >
using sycl::_V1::detail::is_nan_type = is_contained< T, gtl::nan_list >
 
template<typename T >
using sycl::_V1::detail::nan_return_t = typename nan_types< T, T >::ret_type
 
template<typename T >
using sycl::_V1::detail::nan_argument_base_t = typename nan_types< T, T >::arg_type
 
template<typename T >
using sycl::_V1::detail::make_floating_point_t = make_type_t< T, gtl::scalar_floating_list >
 
template<typename T >
using sycl::_V1::detail::make_singed_integer_t = make_type_t< T, gtl::scalar_signed_integer_list >
 
template<typename T >
using sycl::_V1::detail::make_unsinged_integer_t = make_type_t< T, gtl::scalar_unsigned_integer_list >
 
template<typename T , typename B >
using sycl::_V1::detail::convert_data_type = convert_data_type_impl< T, B, T >
 
template<typename T >
using sycl::_V1::detail::mptr_or_vec_elem_type_t = typename mptr_or_vec_elem_type< T >::type
 
template<typename T , typename T8 , typename T16 , typename T32 , typename T64 >
using sycl::_V1::detail::select_apply_cl_scalar_t = std::conditional_t< sizeof(T)==1, T8, std::conditional_t< sizeof(T)==2, T16, std::conditional_t< sizeof(T)==4, T32, T64 > >>
 
template<typename T >
using sycl::_V1::detail::select_cl_scalar_integral_signed_t = select_apply_cl_scalar_t< T, sycl::opencl::cl_char, sycl::opencl::cl_short, sycl::opencl::cl_int, sycl::opencl::cl_long >
 
template<typename T >
using sycl::_V1::detail::select_cl_scalar_integral_unsigned_t = select_apply_cl_scalar_t< T, sycl::opencl::cl_uchar, sycl::opencl::cl_ushort, sycl::opencl::cl_uint, sycl::opencl::cl_ulong >
 
template<typename T >
using sycl::_V1::detail::select_cl_scalar_float_t = select_apply_cl_scalar_t< T, std::false_type, sycl::opencl::cl_half, sycl::opencl::cl_float, sycl::opencl::cl_double >
 
template<typename T >
using sycl::_V1::detail::select_cl_scalar_complex_or_T_t = typename select_cl_scalar_complex_or_T< T >::type
 
template<typename T >
using sycl::_V1::detail::select_cl_scalar_integral_t = std::conditional_t< std::is_signed_v< T >, select_cl_scalar_integral_signed_t< T >, select_cl_scalar_integral_unsigned_t< T > >
 
template<typename T >
using sycl::_V1::detail::select_cl_scalar_t = std::conditional_t< std::is_integral_v< T >, select_cl_scalar_integral_t< T >, std::conditional_t< std::is_floating_point_v< T >, select_cl_scalar_float_t< T >, std::conditional_t< is_half< T >::value, sycl::detail::half_impl::BIsRepresentationT, select_cl_scalar_complex_or_T_t< T > >> >
 
template<typename T >
using sycl::_V1::detail::type_helper = typename TypeHelper< T >::RetType
 
template<typename T >
using sycl::_V1::detail::SelectMatchingOpenCLType_t = typename select_cl_mptr_or_vector_or_scalar_or_ptr< T >::type
 
template<typename T >
using sycl::_V1::detail::ConvertToOpenCLTypeImpl_t = std::conditional_t< TryToGetVectorT< T >::value, typename TryToGetVectorT< T >::type, std::conditional_t< TryToGetPointerT< T >::value, typename TryToGetPointerVecT< T >::type, T > >
 
template<typename T >
using sycl::_V1::detail::ConvertToOpenCLType_t = ConvertToOpenCLTypeImpl_t< SelectMatchingOpenCLType_t< T > >
 
template<typename T >
using sycl::_V1::detail::common_rel_ret_t = std::conditional_t< is_vgentype< T >::value, make_singed_integer_t< T >, bool >
 
template<typename T >
using sycl::_V1::detail::internal_rel_ret_t = typename RelationalReturnType< T >::type
 
template<typename T >
using sycl::_V1::detail::rel_sign_bit_test_ret_t = typename RelationalTestForSignBitType< T >::return_type
 
template<typename T >
using sycl::_V1::detail::rel_sign_bit_test_arg_t = typename RelationalTestForSignBitType< T >::argument_type
 

Functions

template<typename To , typename From , typename = typename std::enable_if_t<TryToGetPointerT<From>::value>>
To sycl::_V1::detail::ConvertNonVectorType (From &t)
 
template<typename To , typename From >
To sycl::_V1::detail::ConvertNonVectorType (From *t)
 
template<typename To , typename From >
std::enable_if_t<!TryToGetPointerT< From >::value, To > sycl::_V1::detail::ConvertNonVectorType (From &t)
 
template<typename FROM , typename TO >
std::enable_if_t< is_vgentype< FROM >::value &&is_vgentype< TO >::value &&sizeof(TO)==sizeof(FROM), TO > sycl::_V1::detail::convertDataToType (FROM t)
 
template<typename FROM , typename TO >
std::enable_if_t<!(is_vgentype< FROM >::value &&is_vgentype< TO >::value) &&sizeof(TO)==sizeof(FROM), TO > sycl::_V1::detail::convertDataToType (FROM t)
 
template<typename T >
constexpr T sycl::_V1::detail::msbMask (T)
 
template<typename T >
constexpr bool sycl::_V1::detail::msbIsSet (const T x)
 
template<typename T >
static constexpr T sycl::_V1::detail::max_v ()
 
template<typename T >
static constexpr T sycl::_V1::detail::min_v ()
 
template<typename T >
static constexpr T sycl::_V1::detail::quiet_NaN ()
 
template<typename... Args>
void sycl::_V1::detail::check_vector_size ()