Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
iter_move.h182 linesDownload Raw Back to __iterator
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7// SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES.8//9//===----------------------------------------------------------------------===//10 11#ifndef _LIBCUDACXX___ITERATOR_ITER_MOVE_H12#define _LIBCUDACXX___ITERATOR_ITER_MOVE_H13 14#ifndef __cuda_std__15#include <__config>16#endif // __cuda_std__17 18#include "../__concepts/class_or_enum.h"19#include "../__iterator/iterator_traits.h"20#include "../__type_traits/enable_if.h"21#include "../__type_traits/is_reference.h"22#include "../__type_traits/remove_cvref.h"23#include "../__utility/declval.h"24#include "../__utility/forward.h"25#include "../__utility/move.h"26 27#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)28#  pragma GCC system_header29#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)30#  pragma clang system_header31#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)32#  pragma system_header33#endif // no system header34 35#if defined(__clang__)36#pragma clang diagnostic push37#pragma clang diagnostic ignored "-Wvoid-ptr-dereference"38#endif39 40 41#if _LIBCUDACXX_STD_VER > 1442 43// [iterator.cust.move]44 45_LIBCUDACXX_BEGIN_NAMESPACE_RANGES46_LIBCUDACXX_BEGIN_NAMESPACE_CPO(__iter_move)47 48_LIBCUDACXX_INLINE_VISIBILITY49void iter_move();50 51#if LIBCUDACXX_STD_VER > 1752template <class _Tp>53concept __unqualified_iter_move =54  __class_or_enum<remove_cvref_t<_Tp>> &&55  requires (_Tp&& __t) {56    iter_move(_CUDA_VSTD::forward<_Tp>(__t));57  };58 59template<class _Tp>60concept __move_deref =61  !__unqualified_iter_move<_Tp> &&62  requires (_Tp&& __t) {63    *__t;64    requires is_lvalue_reference_v<decltype(*__t)>;65  };66 67template<class _Tp>68concept __just_deref =69  !__unqualified_iter_move<_Tp> &&70  !__move_deref<_Tp> &&71  requires (_Tp&& __t) {72    *__t;73    requires (!is_lvalue_reference_v<decltype(*__t)>);74  };75 76#else // ^^^ CXX20 ^^^ / vvv CXX17 vvv77 78template <class _Tp>79_LIBCUDACXX_CONCEPT_FRAGMENT(80  __unqualified_iter_move_,81  requires(_Tp&& __t)(82    requires(__class_or_enum<remove_cvref_t<_Tp>>),83    (iter_move(_CUDA_VSTD::forward<_Tp>(__t)))84  ));85 86template <class _Tp>87_LIBCUDACXX_CONCEPT __unqualified_iter_move = _LIBCUDACXX_FRAGMENT(__unqualified_iter_move_, _Tp);88 89template <class _Tp>90_LIBCUDACXX_CONCEPT_FRAGMENT(91  __move_deref_,92  requires(_Tp&& __t)(93    requires(!__unqualified_iter_move<_Tp>),94    requires(is_lvalue_reference_v<decltype(*__t)>)95  ));96 97template<class _Tp>98_LIBCUDACXX_CONCEPT __move_deref = _LIBCUDACXX_FRAGMENT(__move_deref_, _Tp);99 100template<class _Tp>101_LIBCUDACXX_CONCEPT_FRAGMENT(102  __just_deref_,103  requires(_Tp&& __t)(104    requires(!__unqualified_iter_move<_Tp>),105    requires(!__move_deref<_Tp>),106    requires(!is_lvalue_reference_v<decltype(*__t)>)107  ));108 109template<class _Tp>110_LIBCUDACXX_CONCEPT __just_deref = _LIBCUDACXX_FRAGMENT(__just_deref_, _Tp);111#endif // LIBCUDACXX_STD_VER < 20112 113// [iterator.cust.move]114 115struct __fn {116  _LIBCUDACXX_TEMPLATE(class _Ip)117    _LIBCUDACXX_REQUIRES( __unqualified_iter_move<_Ip>)118  _LIBCUDACXX_NODISCARD_ATTRIBUTE _LIBCUDACXX_INLINE_VISIBILITY119    constexpr decltype(auto) operator()(_Ip&& __i) const120    noexcept(noexcept(iter_move(_CUDA_VSTD::forward<_Ip>(__i))))121  {122    return iter_move(_CUDA_VSTD::forward<_Ip>(__i));123  }124 125  _LIBCUDACXX_TEMPLATE(class _Ip)126    _LIBCUDACXX_REQUIRES( __move_deref<_Ip>)127  _LIBCUDACXX_NODISCARD_ATTRIBUTE _LIBCUDACXX_INLINE_VISIBILITY constexpr auto operator()(_Ip&& __i) const128    noexcept(noexcept(_CUDA_VSTD::move(*_CUDA_VSTD::forward<_Ip>(__i))))129    -> decltype(      _CUDA_VSTD::move(*_CUDA_VSTD::forward<_Ip>(__i)))130    { return          _CUDA_VSTD::move(*_CUDA_VSTD::forward<_Ip>(__i)); }131 132  _LIBCUDACXX_TEMPLATE(class _Ip)133    _LIBCUDACXX_REQUIRES( __just_deref<_Ip>)134  _LIBCUDACXX_NODISCARD_ATTRIBUTE _LIBCUDACXX_INLINE_VISIBILITY constexpr auto operator()(_Ip&& __i) const135    noexcept(noexcept(*_CUDA_VSTD::forward<_Ip>(__i)))136    -> decltype(      *_CUDA_VSTD::forward<_Ip>(__i))137    { return          *_CUDA_VSTD::forward<_Ip>(__i); }138};139_LIBCUDACXX_END_NAMESPACE_CPO140inline namespace __cpo {141  _LIBCUDACXX_CPO_ACCESSIBILITY auto iter_move = __iter_move::__fn{};142} // namespace __cpo143_LIBCUDACXX_END_NAMESPACE_RANGES144 145_LIBCUDACXX_BEGIN_NAMESPACE_STD146 147#if _LIBCUDACXX_STD_VER > 17148template<__dereferenceable _Tp>149  requires requires(_Tp& __t) { { _CUDA_VRANGES::iter_move(__t) } -> __can_reference; }150using iter_rvalue_reference_t = decltype(_CUDA_VRANGES::iter_move(_CUDA_VSTD::declval<_Tp&>()));151 152#else153 154template<class _Tp>155_LIBCUDACXX_CONCEPT_FRAGMENT(156  __can_iter_rvalue_reference_t_,157  requires(_Tp& __t)(158    requires(__dereferenceable<_Tp>),159    requires(__can_reference<decltype(_CUDA_VRANGES::iter_move(__t))>)160  ));161 162template<class _Tp>163_LIBCUDACXX_CONCEPT __can_iter_rvalue_reference_t =  _LIBCUDACXX_FRAGMENT(__can_iter_rvalue_reference_t_, _Tp);164 165template<class _Tp>166using __iter_rvalue_reference_t = decltype(_CUDA_VRANGES::iter_move(_CUDA_VSTD::declval<_Tp&>()));167 168template<class _Tp>169using iter_rvalue_reference_t = enable_if_t<__can_iter_rvalue_reference_t<_Tp>,170                                            __iter_rvalue_reference_t<_Tp>>;171#endif // LIBCUDACXX_STD_VER < 20172 173_LIBCUDACXX_END_NAMESPACE_STD174 175#endif // _LIBCUDACXX_STD_VER > 14176 177#if defined(__clang__)178#pragma clang diagnostic pop179#endif180 181#endif // _LIBCUDACXX___ITERATOR_ITER_MOVE_H182 
codekingpro/portable-devtools · Team Ai