Line data Source code
1 : #pragma once 2 : 3 : #include "CUDADefines.h" 4 : #include <thrust/complex.h> 5 : #include <complex> 6 : 7 : namespace elsa 8 : { 9 : namespace detail 10 : { 11 : struct abs_fn { 12 : template <class T> 13 : __host__ constexpr auto operator()(const T& arg) const noexcept 14 : -> decltype(std::abs(std::declval<T>())) 15 106725 : { 16 106725 : return std::abs(arg); 17 106725 : } 18 : 19 : template <class T> 20 : __host__ __device__ constexpr auto 21 : operator()(const thrust::complex<T>& arg) const noexcept 22 : -> decltype(thrust::abs(std::declval<thrust::complex<T>>())) 23 134963 : { 24 134963 : return thrust::abs(arg); 25 134963 : } 26 : }; 27 : } // namespace detail 28 : 29 : static constexpr __device__ detail::abs_fn abs; 30 : } // namespace elsa