Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
structured_bindings.h161 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_STRUCTURED_BINDINGS_H11#define _LIBCUDACXX___TUPLE_STRUCTURED_BINDINGS_H12 13#ifdef __cuda_std__14 15#  if defined(_LIBCUDACXX_COMPILER_CLANG)16#    pragma clang diagnostic push17#    pragma clang diagnostic ignored "-Wmismatched-tags"18#  endif // _LIBCUDACXX_COMPILER_CLANG19 20#  if !defined(__CUDACC_RTC__)21// Fetch utility to get primary template for ::std::tuple_size necessary for the specialization of22// ::std::tuple_size<cuda::std::tuple> to enable structured bindings.23// See https://github.com/NVIDIA/libcudacxx/issues/31624#    include <utility>25#  endif26 27#  include "../__fwd/array.h"28#  include "../__fwd/pair.h"29#  include "../__fwd/tuple.h"30#  include "../__tuple_dir/tuple_element.h"31#  include "../__tuple_dir/tuple_size.h"32#  include "../__type_traits/integral_constant.h"33 34// This is a workaround for the fact that structured bindings require that the specializations of35// `tuple_size` and `tuple_element` reside in namespace std (https://eel.is/c++draft/dcl.struct.bind#4).36// See https://github.com/NVIDIA/libcudacxx/issues/316 for a short discussion37#  if _LIBCUDACXX_STD_VER > 1438namespace std {39#    if defined(__CUDACC_RTC__)40template <class... _Tp>41struct tuple_size;42 43template <size_t _Ip, class... _Tp>44struct tuple_element;45#    endif46 47template <class _Tp, size_t _Size>48struct tuple_size<_CUDA_VSTD::array<_Tp, _Size>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::array<_Tp, _Size>>49{};50 51template <class _Tp, size_t _Size>52struct tuple_size<const _CUDA_VSTD::array<_Tp, _Size>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::array<_Tp, _Size>>53{};54 55template <class _Tp, size_t _Size>56struct tuple_size<volatile _CUDA_VSTD::array<_Tp, _Size>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::array<_Tp, _Size>>57{};58 59template <class _Tp, size_t _Size>60struct tuple_size<const volatile _CUDA_VSTD::array<_Tp, _Size>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::array<_Tp, _Size>>61{};62 63template <size_t _Ip, class _Tp, size_t _Size>64struct tuple_element<_Ip, _CUDA_VSTD::array<_Tp, _Size>> : _CUDA_VSTD::tuple_element<_Ip, _CUDA_VSTD::array<_Tp, _Size>>65{};66 67template <size_t _Ip, class _Tp, size_t _Size>68struct tuple_element<_Ip, const _CUDA_VSTD::array<_Tp, _Size>>69    : _CUDA_VSTD::tuple_element<_Ip, const _CUDA_VSTD::array<_Tp, _Size>>70{};71 72template <size_t _Ip, class _Tp, size_t _Size>73struct tuple_element<_Ip, volatile _CUDA_VSTD::array<_Tp, _Size>>74    : _CUDA_VSTD::tuple_element<_Ip, volatile _CUDA_VSTD::array<_Tp, _Size>>75{};76 77template <size_t _Ip, class _Tp, size_t _Size>78struct tuple_element<_Ip, const volatile _CUDA_VSTD::array<_Tp, _Size>>79    : _CUDA_VSTD::tuple_element<_Ip, const volatile _CUDA_VSTD::array<_Tp, _Size>>80{};81 82template <class _Tp, class _Up>83struct tuple_size<_CUDA_VSTD::pair<_Tp, _Up>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::pair<_Tp, _Up>>84{};85 86template <class _Tp, class _Up>87struct tuple_size<const _CUDA_VSTD::pair<_Tp, _Up>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::pair<_Tp, _Up>>88{};89 90template <class _Tp, class _Up>91struct tuple_size<volatile _CUDA_VSTD::pair<_Tp, _Up>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::pair<_Tp, _Up>>92{};93 94template <class _Tp, class _Up>95struct tuple_size<const volatile _CUDA_VSTD::pair<_Tp, _Up>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::pair<_Tp, _Up>>96{};97 98template <size_t _Ip, class _Tp, class _Up>99struct tuple_element<_Ip, _CUDA_VSTD::pair<_Tp, _Up>> : _CUDA_VSTD::tuple_element<_Ip, _CUDA_VSTD::pair<_Tp, _Up>>100{};101 102template <size_t _Ip, class _Tp, class _Up>103struct tuple_element<_Ip, const _CUDA_VSTD::pair<_Tp, _Up>>104    : _CUDA_VSTD::tuple_element<_Ip, const _CUDA_VSTD::pair<_Tp, _Up>>105{};106 107template <size_t _Ip, class _Tp, class _Up>108struct tuple_element<_Ip, volatile _CUDA_VSTD::pair<_Tp, _Up>>109    : _CUDA_VSTD::tuple_element<_Ip, volatile _CUDA_VSTD::pair<_Tp, _Up>>110{};111 112template <size_t _Ip, class _Tp, class _Up>113struct tuple_element<_Ip, const volatile _CUDA_VSTD::pair<_Tp, _Up>>114    : _CUDA_VSTD::tuple_element<_Ip, const volatile _CUDA_VSTD::pair<_Tp, _Up>>115{};116 117template <class... _Tp>118struct tuple_size<_CUDA_VSTD::tuple<_Tp...>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::tuple<_Tp...>>119{};120 121template <class... _Tp>122struct tuple_size<const _CUDA_VSTD::tuple<_Tp...>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::tuple<_Tp...>>123{};124 125template <class... _Tp>126struct tuple_size<volatile _CUDA_VSTD::tuple<_Tp...>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::tuple<_Tp...>>127{};128 129template <class... _Tp>130struct tuple_size<const volatile _CUDA_VSTD::tuple<_Tp...>> : _CUDA_VSTD::tuple_size<_CUDA_VSTD::tuple<_Tp...>>131{};132 133template <size_t _Ip, class... _Tp>134struct tuple_element<_Ip, _CUDA_VSTD::tuple<_Tp...>> : _CUDA_VSTD::tuple_element<_Ip, _CUDA_VSTD::tuple<_Tp...>>135{};136 137template <size_t _Ip, class... _Tp>138struct tuple_element<_Ip, const _CUDA_VSTD::tuple<_Tp...>>139    : _CUDA_VSTD::tuple_element<_Ip, const _CUDA_VSTD::tuple<_Tp...>>140{};141 142template <size_t _Ip, class... _Tp>143struct tuple_element<_Ip, volatile _CUDA_VSTD::tuple<_Tp...>>144    : _CUDA_VSTD::tuple_element<_Ip, volatile _CUDA_VSTD::tuple<_Tp...>>145{};146 147template <size_t _Ip, class... _Tp>148struct tuple_element<_Ip, const volatile _CUDA_VSTD::tuple<_Tp...>>149    : _CUDA_VSTD::tuple_element<_Ip, const volatile _CUDA_VSTD::tuple<_Tp...>>150{};151} // namespace std152#  endif // _LIBCUDACXX_STD_VER > 14153 154#  if defined(_LIBCUDACXX_COMPILER_CLANG)155#    pragma clang diagnostic pop156#  endif // _LIBCUDACXX_COMPILER_CLANG157 158#endif // __cuda_std__159 160#endif // _LIBCUDACXX___TUPLE_STRUCTURED_BINDINGS_H161 
codekingpro/portable-devtools · Team Ai