Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
bind_back.h80 linesDownload Raw Back to __functional
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___FUNCTIONAL_BIND_BACK_H12#define _LIBCUDACXX___FUNCTIONAL_BIND_BACK_H13 14#ifndef __cuda_std__15#include <__config>16#endif // __cuda_std__17 18#include "../__functional/invoke.h"19#include "../__functional/perfect_forward.h"20#include "../__fwd/get.h"21#include "../__tuple_dir/tuple_size.h"22#include "../__type_traits/decay.h"23#include "../__type_traits/enable_if.h"24#include "../__type_traits/is_constructible.h"25#include "../__type_traits/is_move_constructible.h"26#include "../__utility/forward.h"27#include "../__utility/integer_sequence.h"28 29#include "../tuple"30 31#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)32#  pragma GCC system_header33#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)34#  pragma clang system_header35#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)36#  pragma system_header37#endif // no system header38 39_LIBCUDACXX_BEGIN_NAMESPACE_STD40 41#if _LIBCUDACXX_STD_VER > 1442 43template <size_t _NBound, class = make_index_sequence<_NBound>>44struct __bind_back_op;45 46template <size_t _NBound, size_t ..._Ip>47struct __bind_back_op<_NBound, index_sequence<_Ip...>> {48    template <class _Fn, class _BoundArgs, class... _Args>49    _LIBCUDACXX_HIDE_FROM_ABI _LIBCUDACXX_INLINE_VISIBILITY50    constexpr auto operator()(_Fn&& __f, _BoundArgs&& __bound_args, _Args&&... __args) const51        noexcept(noexcept(_CUDA_VSTD::invoke(_CUDA_VSTD::forward<_Fn>(__f), _CUDA_VSTD::forward<_Args>(__args)..., _CUDA_VSTD::get<_Ip>(_CUDA_VSTD::forward<_BoundArgs>(__bound_args))...)))52        -> decltype(      _CUDA_VSTD::invoke(_CUDA_VSTD::forward<_Fn>(__f), _CUDA_VSTD::forward<_Args>(__args)..., _CUDA_VSTD::get<_Ip>(_CUDA_VSTD::forward<_BoundArgs>(__bound_args))...))53        { return          _CUDA_VSTD::invoke(_CUDA_VSTD::forward<_Fn>(__f), _CUDA_VSTD::forward<_Args>(__args)..., _CUDA_VSTD::get<_Ip>(_CUDA_VSTD::forward<_BoundArgs>(__bound_args))...); }54};55 56template <class _Fn, class _BoundArgs>57struct __bind_back_t : __perfect_forward<__bind_back_op<tuple_size_v<_BoundArgs>>, _Fn, _BoundArgs> {58    using __perfect_forward<__bind_back_op<tuple_size_v<_BoundArgs>>, _Fn, _BoundArgs>::__perfect_forward;59};60 61template <class _Fn, class ..._Args, class = enable_if_t<62    _And<63        is_constructible<decay_t<_Fn>, _Fn>,64        is_move_constructible<decay_t<_Fn>>,65        is_constructible<decay_t<_Args>, _Args>...,66        is_move_constructible<decay_t<_Args>>...67    >::value68>>69_LIBCUDACXX_HIDE_FROM_ABI _LIBCUDACXX_INLINE_VISIBILITY70constexpr auto __bind_back(_Fn&& __f, _Args&&... __args)71    noexcept(noexcept(__bind_back_t<decay_t<_Fn>, tuple<decay_t<_Args>...>>(_CUDA_VSTD::forward<_Fn>(__f), _CUDA_VSTD::forward_as_tuple(_CUDA_VSTD::forward<_Args>(__args)...))))72    -> decltype(      __bind_back_t<decay_t<_Fn>, tuple<decay_t<_Args>...>>(_CUDA_VSTD::forward<_Fn>(__f), _CUDA_VSTD::forward_as_tuple(_CUDA_VSTD::forward<_Args>(__args)...)))73    { return          __bind_back_t<decay_t<_Fn>, tuple<decay_t<_Args>...>>(_CUDA_VSTD::forward<_Fn>(__f), _CUDA_VSTD::forward_as_tuple(_CUDA_VSTD::forward<_Args>(__args)...)); }74 75#endif // _LIBCUDACXX_STD_VER > 1476 77_LIBCUDACXX_END_NAMESPACE_STD78 79#endif // _LIBCUDACXX___FUNCTIONAL_BIND_BACK_H80 
codekingpro/portable-devtools · Team Ai