/* * Copyright 2008-2021 NVIDIA Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include #if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC) # pragma GCC system_header #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG) # pragma clang system_header #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC) # pragma system_header #endif // no system header #include THRUST_NAMESPACE_BEGIN namespace detail { template struct unary_traits_imp; template struct unary_traits_imp { using function_type = Operation; using param_type = const function_type&; using result_type = typename Operation::result_type; using argument_type = typename Operation::argument_type; }; // end unary_traits_imp template struct unary_traits_imp { using function_type = Result (*)(Argument); using param_type = Result (*)(Argument); using result_type = Result; using argument_type = Argument; }; // end unary_traits_imp template struct binary_traits_imp; template struct binary_traits_imp { using function_type = Operation; using param_type = const function_type&; using result_type = typename Operation::result_type; using first_argument_type = typename Operation::first_argument_type; using second_argument_type = typename Operation::second_argument_type; }; // end binary_traits_imp template struct binary_traits_imp { using function_type = Result (*)(Argument1, Argument2); using param_type = Result (*)(Argument1, Argument2); using result_type = Result; using first_argument_type = Argument1; using second_argument_type = Argument2; }; // end binary_traits_imp } // namespace detail _CCCL_SUPPRESS_DEPRECATED_PUSH template struct unary_traits { using function_type = typename detail::unary_traits_imp::function_type; using param_type = typename detail::unary_traits_imp::param_type; using result_type = typename detail::unary_traits_imp::result_type; using argument_type = typename detail::unary_traits_imp::argument_type; }; // end unary_traits _CCCL_SUPPRESS_DEPRECATED_POP _CCCL_SUPPRESS_DEPRECATED_PUSH template struct unary_traits { using function_type = Result (*)(Argument); using param_type = Result (*)(Argument); using result_type = Result; using argument_type = Argument; }; // end unary_traits _CCCL_SUPPRESS_DEPRECATED_POP _CCCL_SUPPRESS_DEPRECATED_PUSH template struct binary_traits { using function_type = typename detail::binary_traits_imp::function_type; using param_type = typename detail::binary_traits_imp::param_type; using result_type = typename detail::binary_traits_imp::result_type; using first_argument_type = typename detail::binary_traits_imp::first_argument_type; using second_argument_type = typename detail::binary_traits_imp::second_argument_type; }; // end binary_traits _CCCL_SUPPRESS_DEPRECATED_POP _CCCL_SUPPRESS_DEPRECATED_PUSH template struct binary_traits { using function_type = Result (*)(Argument1, Argument2); using param_type = Result (*)(Argument1, Argument2); using result_type = Result; using first_argument_type = Argument1; using second_argument_type = Argument2; }; // end binary_traits _CCCL_SUPPRESS_DEPRECATED_POP _CCCL_SUPPRESS_DEPRECATED_PUSH template _CCCL_HOST_DEVICE unary_negate not1(const Predicate& pred) { return unary_negate(pred); } // end not1() _CCCL_SUPPRESS_DEPRECATED_POP _CCCL_SUPPRESS_DEPRECATED_PUSH template _CCCL_HOST_DEVICE binary_negate not2(const BinaryPredicate& pred) { return binary_negate(pred); } // end not2() _CCCL_SUPPRESS_DEPRECATED_POP THRUST_NAMESPACE_END