vnl_numeric_traits.cxx
Go to the documentation of this file.
1 // This is core/vnl/vnl_numeric_traits.cxx
2 //:
3 // \file
4 // \author Andrew W. Fitzgibbon, Oxford RRG
5 // Created: 12 Feb 98
6 //
7 //-----------------------------------------------------------------------------
8 
9 #include <complex>
10 #include "vnl_numeric_traits.h"
11 
12 constexpr bool vnl_numeric_traits<bool>::zero;
13 constexpr char vnl_numeric_traits<char>::zero;
14 constexpr unsigned char vnl_numeric_traits<unsigned char>::zero;
15 constexpr signed char vnl_numeric_traits<signed char>::zero;
16 constexpr short vnl_numeric_traits<short>::zero;
17 constexpr unsigned short vnl_numeric_traits<unsigned short>::zero;
18 constexpr int vnl_numeric_traits<int>::zero;
19 constexpr unsigned int vnl_numeric_traits<unsigned int>::zero;
20 constexpr long vnl_numeric_traits<long>::zero;
21 constexpr unsigned long vnl_numeric_traits<unsigned long>::zero;
22 //long long - target type will have width of at least 64 bits. (since C++11)
23 constexpr long long vnl_numeric_traits<long long>::zero;
24 constexpr unsigned long long vnl_numeric_traits<unsigned long long>::zero;
25 
26 
27 constexpr bool vnl_numeric_traits<bool>::one;
28 constexpr char vnl_numeric_traits<char>::one;
29 constexpr unsigned char vnl_numeric_traits<unsigned char>::one;
30 constexpr signed char vnl_numeric_traits<signed char>::one;
31 constexpr short vnl_numeric_traits<short>::one;
32 constexpr unsigned short vnl_numeric_traits<unsigned short>::one;
33 constexpr int vnl_numeric_traits<int>::one;
34 constexpr unsigned int vnl_numeric_traits<unsigned int>::one;
35 constexpr long vnl_numeric_traits<long>::one;
36 constexpr unsigned long vnl_numeric_traits<unsigned long>::one;
37 
38 //long long - target type will have width of at least 64 bits. (since C++11)
39 constexpr long long vnl_numeric_traits<long long>::one;
40 constexpr unsigned long long vnl_numeric_traits<unsigned long long>::one;
41 
44 // It is 127 when "char" is signed and 255 when "char" is unsigned.
45 constexpr unsigned char vnl_numeric_traits<unsigned char>::maxval;
46 constexpr signed char vnl_numeric_traits<signed char>::maxval;
47 constexpr short vnl_numeric_traits<short>::maxval;
48 constexpr unsigned short vnl_numeric_traits<unsigned short>::maxval;
50 constexpr unsigned int vnl_numeric_traits<unsigned int>::maxval;
52 constexpr unsigned long vnl_numeric_traits<unsigned long>::maxval;
53 //long long - target type will have width of at least 64 bits. (since C++11)
54 constexpr long long vnl_numeric_traits<long long>::maxval;
55 constexpr unsigned long long vnl_numeric_traits<unsigned long long>::maxval;
56 
57 constexpr float vnl_numeric_traits<float>::zero;
58 constexpr double vnl_numeric_traits<double>::zero;
59 constexpr long double vnl_numeric_traits<long double>::zero;
60 
61 constexpr float vnl_numeric_traits<float>::one;
62 constexpr double vnl_numeric_traits<double>::one;
63 constexpr long double vnl_numeric_traits<long double>::one;
64 
65 constexpr float vnl_numeric_traits<float>::maxval;
66 constexpr double vnl_numeric_traits<double>::maxval;
67 constexpr long double vnl_numeric_traits<long double>::maxval;
68 
69 // Must use constructor-call syntax for initialization of complex specializations.
70 // std::complex
71 //
72 // 'complex<float>' is not suitable for being a constexpr because it is not a literal type
73 // because it is not an aggregate and has no constexpr
74 // constructors other than copy or move constructors
75 const std::complex<float> vnl_numeric_traits<std::complex<float> >::zero(0.0F);
76 const std::complex<double> vnl_numeric_traits<std::complex<double> >::zero(0.0);
77 const std::complex<long double> vnl_numeric_traits<std::complex<long double> >::zero(0.0L);
78 
79 const std::complex<float> vnl_numeric_traits<std::complex<float> >::one(1.0F);
80 const std::complex<double> vnl_numeric_traits<std::complex<double> >::one(1.0);
81 const std::complex<long double> vnl_numeric_traits<std::complex<long double> >::one(1.0L);
82 
83 // Unknown, so undefined. Will cause link errors if someone refers to it.
84 //const std::complex<float> vnl_numeric_traits<std::complex<float> >::maxval;
85 //const std::complex<double> vnl_numeric_traits<std::complex<double> >::maxval;
86 //const std::complex<long double> vnl_numeric_traits<std::complex<long double> >::maxval;
87 
88 //--------------------------------------------------------------------------------
Templated zero/one/precision.