2 #ifndef vnl_complex_traits_h_ 3 #define vnl_complex_traits_h_ 17 # include <vcl_msvc_warnings.h> 19 #include "vnl/vnl_export.h" 24 #define VCL_DEFINE_SPECIALIZATION_MACRO(T) \ 25 template <> struct VNL_EXPORT vnl_complex_traits<T > \ 27 enum { isreal = true }; \ 28 static T conjugate(T x) { return x; } \ 29 static std::complex<T> complexify(T x) { return std::complex<T >(x, (T)0); } \ 31 #define VCL_DEFINE_SPECIALIZATION_MACRO_SIGNED_UNSIGNED(T) \ 32 VCL_DEFINE_SPECIALIZATION_MACRO(signed T); \ 33 VCL_DEFINE_SPECIALIZATION_MACRO(unsigned T) 45 #undef VCL_DEFINE_SPECIALIZATION_MACRO_SIGNED_UNSIGNED 46 #undef VCL_DEFINE_SPECIALIZATION_MACRO 51 enum { isreal =
true };
52 static float conjugate(
float x) {
return x; }
53 static std::complex<float> complexify(
float x) {
return {x, 0.0f}; }
58 enum { isreal =
true };
59 static double conjugate(
double x) {
return x; }
60 static std::complex<double> complexify(
double x) {
return {x, 0.0}; }
65 enum { isreal =
true };
66 static long double conjugate(
long double x) {
return x; }
67 static std::complex<long double> complexify(
long double x) {
return {x, 0.0}; }
72 enum { isreal =
false };
73 static std::complex<float> conjugate(std::complex<float> x) {
return std::conj(x); }
74 static std::complex<float> complexify(
float x) {
return x; }
79 enum { isreal =
false };
80 static std::complex<double> conjugate(std::complex<double> x) {
return std::conj(x); }
81 static std::complex<double> complexify(
double x) {
return x; }
86 enum { isreal =
false };
87 static std::complex<long double> conjugate(std::complex<long double> x) {
return std::conj(x); }
88 static std::complex<long double> complexify(
long double x) {
return x; }
95 enum { isreal =
true };
97 static std::complex<vnl_bignum> complexify(
vnl_bignum x) {
return std::complex<vnl_bignum>(x,
vnl_bignum(0L)); }
102 enum { isreal =
false };
103 static std::complex<vnl_bignum> conjugate(std::complex<vnl_bignum> x) {
return std::complex<vnl_bignum>(x.real(),-x.imag()); }
104 static std::complex<vnl_bignum> complexify(std::complex<vnl_bignum> x) {
return x; }
111 enum { isreal =
true };
113 static std::complex<vnl_rational> complexify(
vnl_rational x) {
return std::complex<vnl_rational>(x,
vnl_rational(0,1)); }
118 enum { isreal =
false };
119 static std::complex<vnl_rational> conjugate(std::complex<vnl_rational> x) {
return std::complex<vnl_rational>(x.real(),-x.imag());}
120 static std::complex<vnl_rational> complexify(std::complex<vnl_rational> x) {
return x; }
123 #endif // vnl_complex_traits_h_ #define VCL_DEFINE_SPECIALIZATION_MACRO_SIGNED_UNSIGNED(T)
Infinite precision integers.
Infinite precision integers.
#define VCL_DEFINE_SPECIALIZATION_MACRO(T)
High-precision rational numbers.
High-precision rational numbers.