/* * Copyright 2008-2013 NVIDIA Corporation * Copyright 2013 Filipe RNC Maia * * 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 #include #include #include THRUST_NAMESPACE_BEGIN namespace detail { namespace complex { _CCCL_HOST_DEVICE inline complex cprojf(const complex& z) { if (!isinf(z.real()) && !isinf(z.imag())) { return z; } else { // std::numeric_limits::infinity() doesn't run on the GPU return complex(infinity(), copysignf(0.0, z.imag())); } } _CCCL_HOST_DEVICE inline complex cproj(const complex& z) { if (!isinf(z.real()) && !isinf(z.imag())) { return z; } else { // std::numeric_limits::infinity() doesn't run on the GPU return complex(infinity(), copysign(0.0, z.imag())); } } } // namespace complex } // namespace detail template _CCCL_HOST_DEVICE inline thrust::complex proj(const thrust::complex& z) { return detail::complex::cproj(z); } template <> _CCCL_HOST_DEVICE inline thrust::complex proj(const thrust::complex& z) { return detail::complex::cproj(z); } template <> _CCCL_HOST_DEVICE inline thrust::complex proj(const thrust::complex& z) { return detail::complex::cprojf(z); } THRUST_NAMESPACE_END