Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
tuple_element.h133 linesDownload Raw Back to __tuple_dir
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6// SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES.7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCUDACXX___TUPLE_TUPLE_ELEMENT_H11#define _LIBCUDACXX___TUPLE_TUPLE_ELEMENT_H12 13#ifndef __cuda_std__14#  include <__config>15#endif // __cuda_std__16 17#include "../__tuple_dir/tuple_indices.h"18#include "../__tuple_dir/tuple_types.h"19#include "../__type_traits/add_const.h"20#include "../__type_traits/add_cv.h"21#include "../__type_traits/add_volatile.h"22#include "../cstddef"23 24#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)25#  pragma GCC system_header26#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)27#  pragma clang system_header28#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)29#  pragma system_header30#endif // no system header31 32_LIBCUDACXX_BEGIN_NAMESPACE_STD33 34template <size_t _Ip, class _Tp>35struct _LIBCUDACXX_TEMPLATE_VIS tuple_element;36 37template <size_t _Ip, class... _Tp>38using __tuple_element_t _LIBCUDACXX_NODEBUG_TYPE = typename tuple_element<_Ip, _Tp...>::type;39 40template <size_t _Ip, class _Tp>41struct _LIBCUDACXX_TEMPLATE_VIS tuple_element<_Ip, const _Tp>42{43  typedef _LIBCUDACXX_NODEBUG_TYPE typename add_const<__tuple_element_t<_Ip, _Tp>>::type type;44};45 46template <size_t _Ip, class _Tp>47struct _LIBCUDACXX_TEMPLATE_VIS tuple_element<_Ip, volatile _Tp>48{49  typedef _LIBCUDACXX_NODEBUG_TYPE typename add_volatile<__tuple_element_t<_Ip, _Tp>>::type type;50};51 52template <size_t _Ip, class _Tp>53struct _LIBCUDACXX_TEMPLATE_VIS tuple_element<_Ip, const volatile _Tp>54{55  typedef _LIBCUDACXX_NODEBUG_TYPE typename add_cv<__tuple_element_t<_Ip, _Tp>>::type type;56};57 58#ifdef _LIBCUDACXX_COMPILER_MSVC59 60namespace __indexer_detail {61 62template <size_t _Idx, class... _Types>63struct _nth_of;64 65template <class _Head, class... _Tail>66struct _nth_of<0, _Head, _Tail...>67{68  using type = _Head;69};70 71template <size_t _Idx, class _Head, class... _Tail>72struct _nth_of<_Idx, _Head, _Tail...>73{74  using type = typename _nth_of<_Idx - 1, _Tail...>::type;75};76 77template <size_t _Idx, class... _Types>78struct nth_of79{80  static_assert(_Idx < sizeof...(_Types), "");81  using _impl = _nth_of<_Idx, _Types...>;82  using type  = typename _impl::type;83};84 85} // namespace __indexer_detail86 87template <size_t _Idx, class... _Types>88using __type_pack_element _LIBCUDACXX_NODEBUG_TYPE = typename __indexer_detail::nth_of<_Idx, _Types...>::type;89 90#elif !__has_builtin(__type_pack_element)91 92namespace __indexer_detail {93 94template <size_t _Idx, class _Tp>95struct __indexed96{97  using type _LIBCUDACXX_NODEBUG_TYPE = _Tp;98};99 100template <class _Types, class _Indexes>101struct __indexer;102 103template <class... _Types, size_t... _Idx>104struct __indexer<__tuple_types<_Types...>, __tuple_indices<_Idx...>> : __indexed<_Idx, _Types>...105{};106 107template <size_t _Idx, class _Tp>108_LIBCUDACXX_INLINE_VISIBILITY __indexed<_Idx, _Tp> __at_index(__indexed<_Idx, _Tp> const&);109 110} // namespace __indexer_detail111 112template <size_t _Idx, class... _Types>113using __type_pack_element _LIBCUDACXX_NODEBUG_TYPE =114    typename decltype(__indexer_detail::__at_index<_Idx>(__indexer_detail::__indexer< __tuple_types<_Types...>,115        __make_tuple_indices_t<sizeof...(_Types)>>{}))::type;116#endif117 118template <size_t _Ip, class... _Types>119struct _LIBCUDACXX_TEMPLATE_VIS tuple_element<_Ip, __tuple_types<_Types...> >120{121  static_assert(_Ip < sizeof...(_Types), "tuple_element index out of range");122  typedef _LIBCUDACXX_NODEBUG_TYPE __type_pack_element<_Ip, _Types...> type;123};124 125#if _LIBCUDACXX_STD_VER > 11126template <size_t _Ip, class... _Tp>127using tuple_element_t _LIBCUDACXX_NODEBUG_TYPE = typename tuple_element<_Ip, _Tp...>::type;128#endif129 130_LIBCUDACXX_END_NAMESPACE_STD131 132#endif // _LIBCUDACXX___TUPLE_TUPLE_ELEMENT_H133 
codekingpro/portable-devtools · Team Ai