Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
macros.h644 linesDownload Raw Back to __mdspan
1/*2//@HEADER3// ************************************************************************4//5//                        Kokkos v. 2.06//              Copyright (2019) Sandia Corporation7//8// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,9// the U.S. Government retains certain rights in this software.10//11// Redistribution and use in source and binary forms, with or without12// modification, are permitted provided that the following conditions are13// met:14//15// 1. Redistributions of source code must retain the above copyright16// notice, this list of conditions and the following disclaimer.17//18// 2. Redistributions in binary form must reproduce the above copyright19// notice, this list of conditions and the following disclaimer in the20// documentation and/or other materials provided with the distribution.21//22// 3. Neither the name of the Corporation nor the names of the23// contributors may be used to endorse or promote products derived from24// this software without specific prior written permission.25//26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.37//38// Questions? Contact Christian R. Trott (crtrott@sandia.gov)39//40// ************************************************************************41//@HEADER42*/43 44 45#ifndef _LIBCUDACXX___MDSPAN_MACROS_HPP46#define _LIBCUDACXX___MDSPAN_MACROS_HPP47 48#ifndef __cuda_std__49#include <__config>50#endif // __cuda_std__51 52#include "../__mdspan/config.h"53#include "../__type_traits/enable_if.h"54#include "../__type_traits/is_void.h"55#include "../__type_traits/remove_reference.h"56#include "../__utility/declval.h"57 58#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)59#  pragma GCC system_header60#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)61#  pragma clang system_header62#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)63#  pragma system_header64#endif // no system header65 66#if _LIBCUDACXX_STD_VER > 1167 68#ifndef __MDSPAN_FORCE_INLINE_FUNCTION69#  ifdef __MDSPAN_COMPILER_MSVC // Microsoft compilers70#    define __MDSPAN_FORCE_INLINE_FUNCTION __forceinline _LIBCUDACXX_HOST_DEVICE71#  else72#    define __MDSPAN_FORCE_INLINE_FUNCTION __attribute__((always_inline)) _LIBCUDACXX_HOST_DEVICE73#  endif74#endif75 76#ifndef __MDSPAN_INLINE_FUNCTION77#  define __MDSPAN_INLINE_FUNCTION inline _LIBCUDACXX_HOST_DEVICE78#endif79 80// In CUDA defaulted functions do not need host device markup81#ifndef __MDSPAN_INLINE_FUNCTION_DEFAULTED82#  define __MDSPAN_INLINE_FUNCTION_DEFAULTED83#endif84 85//==============================================================================86// <editor-fold desc="Preprocessor helpers"> {{{187 88#define __MDSPAN_PP_COUNT(...) \89  __MDSPAN_PP_INTERNAL_EXPAND_ARGS_PRIVATE( \90    __MDSPAN_PP_INTERNAL_ARGS_AUGMENTER(__VA_ARGS__) \91  )92 93#define __MDSPAN_PP_INTERNAL_ARGS_AUGMENTER(...) unused, __VA_ARGS__94#define __MDSPAN_PP_INTERNAL_EXPAND(x) x95#define __MDSPAN_PP_INTERNAL_EXPAND_ARGS_PRIVATE(...) \96  __MDSPAN_PP_INTERNAL_EXPAND( \97    __MDSPAN_PP_INTERNAL_COUNT_PRIVATE( \98      __VA_ARGS__, 69, 68, 67, 66, 65, 64, 63, 62, 61, \99      60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49,  \100      48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37,  \101      36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25,  \102      24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13,  \103      12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 \104    ) \105  )106# define __MDSPAN_PP_INTERNAL_COUNT_PRIVATE( \107         _1_, _2_, _3_, _4_, _5_, _6_, _7_, _8_, _9_, \108    _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, \109    _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, \110    _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, \111    _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, \112    _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, \113    _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, \114    _70, count, ...) count \115    /**/116 117#define __MDSPAN_PP_STRINGIFY_IMPL(x) #x118#define __MDSPAN_PP_STRINGIFY(x) __MDSPAN_PP_STRINGIFY_IMPL(x)119 120#define __MDSPAN_PP_CAT_IMPL(x, y) x ## y121#define __MDSPAN_PP_CAT(x, y) __MDSPAN_PP_CAT_IMPL(x, y)122 123#define __MDSPAN_PP_EVAL(X, ...) X(__VA_ARGS__)124 125#define __MDSPAN_PP_REMOVE_PARENS_IMPL(...) __VA_ARGS__126#define __MDSPAN_PP_REMOVE_PARENS(...) __MDSPAN_PP_REMOVE_PARENS_IMPL __VA_ARGS__127 128// </editor-fold> end Preprocessor helpers }}}1129//==============================================================================130 131//==============================================================================132// <editor-fold desc="Concept emulation"> {{{1133 134// These compatibility macros don't help with partial ordering, but they should do the trick135// for what we need to do with concepts in mdspan136#ifdef __MDSPAN_USE_CONCEPTS137#  define __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) > requires REQ138#  define __MDSPAN_FUNCTION_REQUIRES(PAREN_PREQUALS, FNAME, PAREN_PARAMS, QUALS, REQ) \139     __MDSPAN_PP_REMOVE_PARENS(PAREN_PREQUALS) FNAME PAREN_PARAMS QUALS requires REQ \140     /**/141#else142#  define __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) , typename _CUDA_VSTD::enable_if<(REQ), int>::type = 0>143#  define __MDSPAN_FUNCTION_REQUIRES(PAREN_PREQUALS, FNAME, PAREN_PARAMS, QUALS, REQ) \144     __MDSPAN_TEMPLATE_REQUIRES( \145       class __function_requires_ignored=void, \146       (_CUDA_VSTD::is_void<__function_requires_ignored>::value && REQ) \147     ) __MDSPAN_PP_REMOVE_PARENS(PAREN_PREQUALS) FNAME PAREN_PARAMS QUALS \148     /**/149#endif150 151 152#if defined(__MDSPAN_COMPILER_MSVC)153#  define __MDSPAN_TEMPLATE_REQUIRES(...) \154      __MDSPAN_PP_CAT( \155        __MDSPAN_PP_CAT(__MDSPAN_TEMPLATE_REQUIRES_, __MDSPAN_PP_COUNT(__VA_ARGS__))\156        (__VA_ARGS__), \157      ) \158    /**/159#else160#  define __MDSPAN_TEMPLATE_REQUIRES(...) \161    __MDSPAN_PP_EVAL( \162        __MDSPAN_PP_CAT(__MDSPAN_TEMPLATE_REQUIRES_, __MDSPAN_PP_COUNT(__VA_ARGS__)), \163        __VA_ARGS__ \164    ) \165    /**/166#endif167 168#define __MDSPAN_TEMPLATE_REQUIRES_2(TP1, REQ) \169  template<TP1 \170    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \171    /**/172#define __MDSPAN_TEMPLATE_REQUIRES_3(TP1, TP2, REQ) \173  template<TP1, TP2 \174    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \175    /**/176#define __MDSPAN_TEMPLATE_REQUIRES_4(TP1, TP2, TP3, REQ) \177  template<TP1, TP2, TP3 \178    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \179    /**/180#define __MDSPAN_TEMPLATE_REQUIRES_5(TP1, TP2, TP3, TP4, REQ) \181  template<TP1, TP2, TP3, TP4 \182    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \183    /**/184#define __MDSPAN_TEMPLATE_REQUIRES_6(TP1, TP2, TP3, TP4, TP5, REQ) \185  template<TP1, TP2, TP3, TP4, TP5 \186    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \187    /**/188#define __MDSPAN_TEMPLATE_REQUIRES_7(TP1, TP2, TP3, TP4, TP5, TP6, REQ) \189  template<TP1, TP2, TP3, TP4, TP5, TP6 \190    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \191    /**/192#define __MDSPAN_TEMPLATE_REQUIRES_8(TP1, TP2, TP3, TP4, TP5, TP6, TP7, REQ) \193  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7 \194    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \195    /**/196#define __MDSPAN_TEMPLATE_REQUIRES_9(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, REQ) \197  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8 \198    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \199    /**/200#define __MDSPAN_TEMPLATE_REQUIRES_10(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, REQ) \201  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9 \202    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \203    /**/204#define __MDSPAN_TEMPLATE_REQUIRES_11(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, REQ) \205  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10 \206    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \207    /**/208#define __MDSPAN_TEMPLATE_REQUIRES_12(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, REQ) \209  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11 \210    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \211    /**/212#define __MDSPAN_TEMPLATE_REQUIRES_13(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, REQ) \213  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12 \214    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \215    /**/216#define __MDSPAN_TEMPLATE_REQUIRES_14(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, REQ) \217  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13 \218    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \219    /**/220#define __MDSPAN_TEMPLATE_REQUIRES_15(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, REQ) \221  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14 \222    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \223    /**/224#define __MDSPAN_TEMPLATE_REQUIRES_16(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, REQ) \225  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15 \226    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \227    /**/228#define __MDSPAN_TEMPLATE_REQUIRES_17(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16, REQ) \229  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16 \230    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \231    /**/232#define __MDSPAN_TEMPLATE_REQUIRES_18(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, REQ) \233  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17 \234    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \235    /**/236#define __MDSPAN_TEMPLATE_REQUIRES_19(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, TP18, REQ) \237  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, TP18 \238    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \239    /**/240#define __MDSPAN_TEMPLATE_REQUIRES_20(TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, TP18, TP19, REQ) \241  template<TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, TP18, TP19 \242    __MDSPAN_CLOSE_ANGLE_REQUIRES(REQ) \243    /**/244 245#define __MDSPAN_INSTANTIATE_ONLY_IF_USED \246  __MDSPAN_TEMPLATE_REQUIRES( \247    class __instantiate_only_if_used_tparam=void, \248    ( _LIBCUDACXX_TRAIT(_CUDA_VSTD::is_void, __instantiate_only_if_used_tparam) ) \249  ) \250  /**/251 252// </editor-fold> end Concept emulation }}}1253//==============================================================================254 255//==============================================================================256// <editor-fold desc="Return type deduction"> {{{1257 258#if __MDSPAN_USE_RETURN_TYPE_DEDUCTION259#  define __MDSPAN_DEDUCE_RETURN_TYPE_SINGLE_LINE(SIGNATURE, BODY) \260    auto __MDSPAN_PP_REMOVE_PARENS(SIGNATURE) { return __MDSPAN_PP_REMOVE_PARENS(BODY); }261#  define __MDSPAN_DEDUCE_DECLTYPE_AUTO_RETURN_TYPE_SINGLE_LINE(SIGNATURE, BODY) \262    decltype(auto) __MDSPAN_PP_REMOVE_PARENS(SIGNATURE) { return __MDSPAN_PP_REMOVE_PARENS(BODY); }263#else264#  define __MDSPAN_DEDUCE_RETURN_TYPE_SINGLE_LINE(SIGNATURE, BODY) \265    auto __MDSPAN_PP_REMOVE_PARENS(SIGNATURE) \266      -> _CUDA_VSTD::remove_cv_t<_CUDA_VSTD::remove_reference_t<decltype(BODY)>> \267    { return __MDSPAN_PP_REMOVE_PARENS(BODY); }268#  define __MDSPAN_DEDUCE_DECLTYPE_AUTO_RETURN_TYPE_SINGLE_LINE(SIGNATURE, BODY) \269    auto __MDSPAN_PP_REMOVE_PARENS(SIGNATURE) \270      -> decltype(BODY) \271    { return __MDSPAN_PP_REMOVE_PARENS(BODY); }272 273#endif274 275// </editor-fold> end Return type deduction }}}1276//==============================================================================277 278//==============================================================================279// <editor-fold desc="fold expressions"> {{{1280 281struct __mdspan_enable_fold_comma { };282 283#ifdef __MDSPAN_USE_FOLD_EXPRESSIONS284#  define __MDSPAN_FOLD_AND(...) ((__VA_ARGS__) && ...)285#  define __MDSPAN_FOLD_AND_TEMPLATE(...) ((__VA_ARGS__) && ...)286#  define __MDSPAN_FOLD_OR(...) ((__VA_ARGS__) || ...)287#  define __MDSPAN_FOLD_ASSIGN_LEFT(__INIT, ...) (__INIT = ... = (__VA_ARGS__))288#  define __MDSPAN_FOLD_ASSIGN_RIGHT(__PACK, ...) (__PACK = ... = (__VA_ARGS__))289#  define __MDSPAN_FOLD_TIMES_RIGHT(__PACK, ...) (__PACK * ... * (__VA_ARGS__))290#  define __MDSPAN_FOLD_PLUS_RIGHT(__PACK, ...) (__PACK + ... + (__VA_ARGS__))291#  define __MDSPAN_FOLD_COMMA(...) ((__VA_ARGS__), ...)292#else293 294_LIBCUDACXX_BEGIN_NAMESPACE_STD295 296namespace __fold_compatibility_impl {297 298// We could probably be more clever here, but at the (small) risk of losing some compiler understanding.  For the299// few operations we need, it's not worth generalizing over the operation300 301#if __MDSPAN_USE_RETURN_TYPE_DEDUCTION302 303__MDSPAN_FORCE_INLINE_FUNCTION304constexpr decltype(auto) __fold_right_and_impl() {305  return true;306}307 308template <class _Arg, class... _Args>309__MDSPAN_FORCE_INLINE_FUNCTION310constexpr decltype(auto) __fold_right_and_impl(_Arg&& __arg, _Args&&... __args) {311  return ((_Arg&&)__arg) && __fold_compatibility_impl::__fold_right_and_impl((_Args&&)__args...);312}313 314__MDSPAN_FORCE_INLINE_FUNCTION315constexpr decltype(auto) __fold_right_or_impl() {316  return false;317}318 319template <class _Arg, class... _Args>320__MDSPAN_FORCE_INLINE_FUNCTION321constexpr auto __fold_right_or_impl(_Arg&& __arg, _Args&&... __args) {322  return ((_Arg&&)__arg) || __fold_compatibility_impl::__fold_right_or_impl((_Args&&)__args...);323}324 325template <class _Arg1>326__MDSPAN_FORCE_INLINE_FUNCTION327constexpr auto __fold_left_assign_impl(_Arg1&& __arg1) {328  return (_Arg1&&)__arg1;329}330 331template <class _Arg1, class _Arg2, class... _Args>332__MDSPAN_FORCE_INLINE_FUNCTION333constexpr auto __fold_left_assign_impl(_Arg1&& __arg1, _Arg2&& __arg2, _Args&&... __args) {334  return __fold_compatibility_impl::__fold_left_assign_impl((((_Arg1&&)__arg1) = ((_Arg2&&)__arg2)), (_Args&&)__args...);335}336 337template <class _Arg1>338__MDSPAN_FORCE_INLINE_FUNCTION339constexpr auto __fold_right_assign_impl(_Arg1&& __arg1) {340  return (_Arg1&&)__arg1;341}342 343template <class _Arg1, class _Arg2, class... _Args>344__MDSPAN_FORCE_INLINE_FUNCTION345constexpr auto __fold_right_assign_impl(_Arg1&& __arg1, _Arg2&& __arg2,  _Args&&... __args) {346  return ((_Arg1&&)__arg1) = __fold_compatibility_impl::__fold_right_assign_impl((_Arg2&&)__arg2, (_Args&&)__args...);347}348 349template <class _Arg1>350__MDSPAN_FORCE_INLINE_FUNCTION351constexpr auto __fold_right_plus_impl(_Arg1&& __arg1) {352  return (_Arg1&&)__arg1;353}354 355template <class _Arg1, class _Arg2, class... _Args>356__MDSPAN_FORCE_INLINE_FUNCTION357constexpr auto __fold_right_plus_impl(_Arg1&& __arg1, _Arg2&& __arg2, _Args&&... __args) {358  return ((_Arg1&&)__arg1) + __fold_compatibility_impl::__fold_right_plus_impl((_Arg2&&)__arg2, (_Args&&)__args...);359}360 361template <class _Arg1>362__MDSPAN_FORCE_INLINE_FUNCTION363constexpr auto __fold_right_times_impl(_Arg1&& __arg1) {364  return (_Arg1&&)__arg1;365}366 367template <class _Arg1, class _Arg2, class... _Args>368__MDSPAN_FORCE_INLINE_FUNCTION369constexpr auto __fold_right_times_impl(_Arg1&& __arg1, _Arg2&& __arg2, _Args&&... __args) {370  return ((_Arg1&&)__arg1) * __fold_compatibility_impl::__fold_right_times_impl((_Arg2&&)__arg2, (_Args&&)__args...);371}372 373#else374 375//------------------------------------------------------------------------------376// <editor-fold desc="right and"> {{{2377 378template <class... _Args>379struct __fold_right_and_impl_;380template <>381struct __fold_right_and_impl_<> {382  using __rv = bool;383  __MDSPAN_FORCE_INLINE_FUNCTION384  static constexpr __rv385  __impl() noexcept {386    return true;387  }388};389template <class _Arg, class... _Args>390struct __fold_right_and_impl_<_Arg, _Args...> {391  using __next_t = __fold_right_and_impl_<_Args...>;392  using __rv = decltype(_CUDA_VSTD::declval<_Arg>() && _CUDA_VSTD::declval<typename __next_t::__rv>());393  __MDSPAN_FORCE_INLINE_FUNCTION394  static constexpr __rv395  __impl(_Arg&& __arg, _Args&&... __args) noexcept {396    return ((_Arg&&)__arg) && __next_t::__impl((_Args&&)__args...);397  }398};399 400template <class... _Args>401__MDSPAN_FORCE_INLINE_FUNCTION402constexpr typename __fold_right_and_impl_<_Args...>::__rv403__fold_right_and_impl(_Args&&... __args) {404  return __fold_right_and_impl_<_Args...>::__impl((_Args&&)__args...);405}406 407// </editor-fold> end right and }}}2408//------------------------------------------------------------------------------409 410//------------------------------------------------------------------------------411// <editor-fold desc="right or"> {{{2412 413template <class... _Args>414struct __fold_right_or_impl_;415template <>416struct __fold_right_or_impl_<> {417  using __rv = bool;418  __MDSPAN_FORCE_INLINE_FUNCTION419  static constexpr __rv420  __impl() noexcept {421    return false;422  }423};424template <class _Arg, class... _Args>425struct __fold_right_or_impl_<_Arg, _Args...> {426  using __next_t = __fold_right_or_impl_<_Args...>;427  using __rv = decltype(_CUDA_VSTD::declval<_Arg>() || _CUDA_VSTD::declval<typename __next_t::__rv>());428  __MDSPAN_FORCE_INLINE_FUNCTION429  static constexpr __rv430  __impl(_Arg&& __arg, _Args&&... __args) noexcept {431    return ((_Arg&&)__arg) || __next_t::__impl((_Args&&)__args...);432  }433};434 435template <class... _Args>436__MDSPAN_FORCE_INLINE_FUNCTION437constexpr typename __fold_right_or_impl_<_Args...>::__rv438__fold_right_or_impl(_Args&&... __args) {439  return __fold_right_or_impl_<_Args...>::__impl((_Args&&)__args...);440}441 442// </editor-fold> end right or }}}2443//------------------------------------------------------------------------------444 445//------------------------------------------------------------------------------446// <editor-fold desc="right plus"> {{{2447 448template <class... _Args>449struct __fold_right_plus_impl_;450template <class _Arg>451struct __fold_right_plus_impl_<_Arg> {452  using __rv = _Arg&&;453  __MDSPAN_FORCE_INLINE_FUNCTION454  static constexpr __rv455  __impl(_Arg&& __arg) noexcept {456    return (_Arg&&)__arg;457  }458};459template <class _Arg1, class _Arg2, class... _Args>460struct __fold_right_plus_impl_<_Arg1, _Arg2, _Args...> {461  using __next_t = __fold_right_plus_impl_<_Arg2, _Args...>;462  using __rv = decltype(_CUDA_VSTD::declval<_Arg1>() + _CUDA_VSTD::declval<typename __next_t::__rv>());463  __MDSPAN_FORCE_INLINE_FUNCTION464  static constexpr __rv465  __impl(_Arg1&& __arg, _Arg2&& __arg2, _Args&&... __args) noexcept {466    return ((_Arg1&&)__arg) + __next_t::__impl((_Arg2&&)__arg2, (_Args&&)__args...);467  }468};469 470template <class... _Args>471__MDSPAN_FORCE_INLINE_FUNCTION472constexpr typename __fold_right_plus_impl_<_Args...>::__rv473__fold_right_plus_impl(_Args&&... __args) {474  return __fold_right_plus_impl_<_Args...>::__impl((_Args&&)__args...);475}476 477// </editor-fold> end right plus }}}2478//------------------------------------------------------------------------------479 480//------------------------------------------------------------------------------481// <editor-fold desc="right times"> {{{2482 483template <class... _Args>484struct __fold_right_times_impl_;485template <class _Arg>486struct __fold_right_times_impl_<_Arg> {487  using __rv = _Arg&&;488  __MDSPAN_FORCE_INLINE_FUNCTION489  static constexpr __rv490  __impl(_Arg&& __arg) noexcept {491    return (_Arg&&)__arg;492  }493};494template <class _Arg1, class _Arg2, class... _Args>495struct __fold_right_times_impl_<_Arg1, _Arg2, _Args...> {496  using __next_t = __fold_right_times_impl_<_Arg2, _Args...>;497  using __rv = decltype(_CUDA_VSTD::declval<_Arg1>() * _CUDA_VSTD::declval<typename __next_t::__rv>());498  __MDSPAN_FORCE_INLINE_FUNCTION499  static constexpr __rv500  __impl(_Arg1&& __arg, _Arg2&& __arg2, _Args&&... __args) noexcept {501    return ((_Arg1&&)__arg) * __next_t::__impl((_Arg2&&)__arg2, (_Args&&)__args...);502  }503};504 505template <class... _Args>506__MDSPAN_FORCE_INLINE_FUNCTION507constexpr typename __fold_right_times_impl_<_Args...>::__rv508__fold_right_times_impl(_Args&&... __args) {509  return __fold_right_times_impl_<_Args...>::__impl((_Args&&)__args...);510}511 512// </editor-fold> end right times }}}2513//------------------------------------------------------------------------------514 515//------------------------------------------------------------------------------516// <editor-fold desc="right assign"> {{{2517 518template <class... _Args>519struct __fold_right_assign_impl_;520template <class _Arg>521struct __fold_right_assign_impl_<_Arg> {522  using __rv = _Arg&&;523  __MDSPAN_FORCE_INLINE_FUNCTION524  static constexpr __rv525  __impl(_Arg&& __arg) noexcept {526    return (_Arg&&)__arg;527  }528};529template <class _Arg1, class _Arg2, class... _Args>530struct __fold_right_assign_impl_<_Arg1, _Arg2, _Args...> {531  using __next_t = __fold_right_assign_impl_<_Arg2, _Args...>;532  using __rv = decltype(_CUDA_VSTD::declval<_Arg1>() = _CUDA_VSTD::declval<typename __next_t::__rv>());533  __MDSPAN_FORCE_INLINE_FUNCTION534  static constexpr __rv535  __impl(_Arg1&& __arg, _Arg2&& __arg2, _Args&&... __args) noexcept {536    return ((_Arg1&&)__arg) = __next_t::__impl((_Arg2&&)__arg2, (_Args&&)__args...);537  }538};539 540template <class... _Args>541__MDSPAN_FORCE_INLINE_FUNCTION542constexpr typename __fold_right_assign_impl_<_Args...>::__rv543__fold_right_assign_impl(_Args&&... __args) {544  return __fold_right_assign_impl_<_Args...>::__impl((_Args&&)__args...);545}546 547// </editor-fold> end right assign }}}2548//------------------------------------------------------------------------------549 550//------------------------------------------------------------------------------551// <editor-fold desc="left assign"> {{{2552 553template <class... _Args>554struct __fold_left_assign_impl_;555template <class _Arg>556struct __fold_left_assign_impl_<_Arg> {557  using __rv = _Arg&&;558  __MDSPAN_FORCE_INLINE_FUNCTION559  static constexpr __rv560  __impl(_Arg&& __arg) noexcept {561    return (_Arg&&)__arg;562  }563};564template <class _Arg1, class _Arg2, class... _Args>565struct __fold_left_assign_impl_<_Arg1, _Arg2, _Args...> {566  using __assign_result_t = decltype(_CUDA_VSTD::declval<_Arg1>() = _CUDA_VSTD::declval<_Arg2>());567  using __next_t = __fold_left_assign_impl_<__assign_result_t, _Args...>;568  using __rv = typename __next_t::__rv;569  __MDSPAN_FORCE_INLINE_FUNCTION570  static constexpr __rv571  __impl(_Arg1&& __arg, _Arg2&& __arg2, _Args&&... __args) noexcept {572    return __next_t::__impl(((_Arg1&&)__arg) = (_Arg2&&)__arg2, (_Args&&)__args...);573  }574};575 576template <class... _Args>577__MDSPAN_FORCE_INLINE_FUNCTION578constexpr typename __fold_left_assign_impl_<_Args...>::__rv579__fold_left_assign_impl(_Args&&... __args) {580  return __fold_left_assign_impl_<_Args...>::__impl((_Args&&)__args...);581}582 583// </editor-fold> end left assign }}}2584//------------------------------------------------------------------------------585 586#endif587 588 589template <class... _Args>590_LIBCUDACXX_HOST_DEVICE591constexpr __mdspan_enable_fold_comma __fold_comma_impl(_Args&&...) noexcept { return { }; }592 593template <bool... _Bs>594struct __bools;595 596} // __fold_compatibility_impl597 598_LIBCUDACXX_END_NAMESPACE_STD599 600#  define __MDSPAN_FOLD_AND(...) _CUDA_VSTD::__fold_compatibility_impl::__fold_right_and_impl((__VA_ARGS__)...)601#  define __MDSPAN_FOLD_OR(...) _CUDA_VSTD::__fold_compatibility_impl::__fold_right_or_impl((__VA_ARGS__)...)602#  define __MDSPAN_FOLD_ASSIGN_LEFT(__INIT, ...) _CUDA_VSTD::__fold_compatibility_impl::__fold_left_assign_impl(__INIT, (__VA_ARGS__)...)603#  define __MDSPAN_FOLD_ASSIGN_RIGHT(__PACK, ...) _CUDA_VSTD::__fold_compatibility_impl::__fold_right_assign_impl((__PACK)..., __VA_ARGS__)604#  define __MDSPAN_FOLD_TIMES_RIGHT(__PACK, ...) _CUDA_VSTD::__fold_compatibility_impl::__fold_right_times_impl((__PACK)..., __VA_ARGS__)605#  define __MDSPAN_FOLD_PLUS_RIGHT(__PACK, ...) _CUDA_VSTD::__fold_compatibility_impl::__fold_right_plus_impl((__PACK)..., __VA_ARGS__)606#  define __MDSPAN_FOLD_COMMA(...) _CUDA_VSTD::__fold_compatibility_impl::__fold_comma_impl((__VA_ARGS__)...)607 608#  define __MDSPAN_FOLD_AND_TEMPLATE(...) \609  _LIBCUDACXX_TRAIT(_CUDA_VSTD::is_same, __fold_compatibility_impl::__bools<(__VA_ARGS__)..., true>, __fold_compatibility_impl::__bools<true, (__VA_ARGS__)...>)610 611#endif612 613// </editor-fold> end Variable template compatibility }}}1614//==============================================================================615 616//==============================================================================617// <editor-fold desc="Pre-C++14 constexpr"> {{{1618 619#if __MDSPAN_USE_CONSTEXPR_14620// Workaround for a bug (I think?) in EDG frontends621#  ifdef __EDG__622#    define __MDSPAN_CONSTEXPR_14_DEFAULTED623#  else624#    define __MDSPAN_CONSTEXPR_14_DEFAULTED constexpr625#  endif626#else627#  define __MDSPAN_CONSTEXPR_14_DEFAULTED628#endif629 630// </editor-fold> end Pre-C++14 constexpr }}}1631//==============================================================================632 633#endif // _LIBCUDACXX_STD_VER > 11634 635#ifndef _LIBCUDACXX_NO_EXCEPTIONS636#define _LIBCUDACXX_THROW_RUNTIME_ERROR(_COND, _MESSAGE) \637  if (!(_COND)) __throw_runtime_error(_MESSAGE)638#else639#define _LIBCUDACXX_THROW_RUNTIME_ERROR(_COND, _MESSAGE) \640  _LIBCUDACXX_ASSERT(_COND, _MESSAGE)641#endif642 643#endif // _LIBCUDACXX___MDSPAN_MACROS_HPP644 
codekingpro/portable-devtools · Team Ai