6 #ifndef MYRAMATH_UTILITY_NUMBER_H 7 #define MYRAMATH_UTILITY_NUMBER_H 14 #include <myramath/utility/detail/LIBPUBLIC.h> 22 typedef double NumberD;
23 typedef std::complex<float> NumberC;
24 typedef std::complex<double> NumberZ;
27 template<
class Number>
char typechar();
30 template<
class Number>
const char*
typestring();
37 {
public:
typedef NumberS type; };
39 {
public:
typedef NumberD type; };
41 {
public:
typedef NumberS type; };
43 {
public:
typedef NumberD type; };
50 {
public:
typedef NumberC type; };
52 {
public:
typedef NumberZ type; };
58 LIBPUBLIC NumberD raise_precision(NumberS s);
59 LIBPUBLIC NumberZ raise_precision(NumberC c);
64 {
public:
typedef NumberD type; };
66 {
public:
typedef NumberZ type; };
69 LIBPUBLIC NumberS lower_precision(NumberD d);
70 LIBPUBLIC NumberC lower_precision(NumberZ z);
75 {
public:
typedef NumberS type; };
77 {
public:
typedef NumberC type; };
80 LIBPUBLIC NumberS scalar_norm2(NumberS x);
81 LIBPUBLIC NumberD scalar_norm2(NumberD x);
82 LIBPUBLIC NumberS scalar_norm2(NumberC x);
83 LIBPUBLIC NumberD scalar_norm2(NumberZ x);
86 LIBPUBLIC NumberS scalar_norm1(NumberS x);
87 LIBPUBLIC NumberD scalar_norm1(NumberD x);
88 LIBPUBLIC NumberS scalar_norm1(NumberC x);
89 LIBPUBLIC NumberD scalar_norm1(NumberZ x);
92 LIBPUBLIC NumberS realpart(NumberS s);
93 LIBPUBLIC NumberD realpart(NumberD d);
94 LIBPUBLIC NumberS realpart(NumberC c);
95 LIBPUBLIC NumberD realpart(NumberZ z);
98 LIBPUBLIC NumberS imagpart(NumberS s);
99 LIBPUBLIC NumberD imagpart(NumberD d);
100 LIBPUBLIC NumberS imagpart(NumberC c);
101 LIBPUBLIC NumberD imagpart(NumberZ z);
104 LIBPUBLIC NumberS conjugate(NumberS s);
105 LIBPUBLIC NumberD conjugate(NumberD d);
106 LIBPUBLIC NumberC conjugate(NumberC c);
107 LIBPUBLIC NumberZ conjugate(NumberZ z);
110 LIBPUBLIC NumberS argument(NumberS s);
111 LIBPUBLIC NumberD argument(NumberD d);
112 LIBPUBLIC NumberS argument(NumberC c);
113 LIBPUBLIC NumberD argument(NumberZ z);
119 template<>
class ReflectField<NumberS,NumberS> {
public:
typedef NumberS type; };
120 template<>
class ReflectField<NumberD,NumberD> {
public:
typedef NumberD type; };
121 template<>
class ReflectField<NumberC,NumberC> {
public:
typedef NumberC type; };
122 template<>
class ReflectField<NumberZ,NumberZ> {
public:
typedef NumberZ type; };
125 template<>
class ReflectField<NumberS,NumberC> {
public:
typedef NumberC type; };
126 template<>
class ReflectField<NumberD,NumberZ> {
public:
typedef NumberZ type; };
127 template<>
class ReflectField<NumberC,NumberS> {
public:
typedef NumberC type; };
128 template<>
class ReflectField<NumberZ,NumberD> {
public:
typedef NumberZ type; };
131 template<>
class ReflectField<NumberS,int> {
public:
typedef NumberS type; };
132 template<>
class ReflectField<NumberD,int> {
public:
typedef NumberD type; };
133 template<>
class ReflectField<NumberC,int> {
public:
typedef NumberC type; };
134 template<>
class ReflectField<NumberZ,int> {
public:
typedef NumberZ type; };
135 template<>
class ReflectField<int,NumberS> {
public:
typedef NumberS type; };
136 template<>
class ReflectField<int,NumberD> {
public:
typedef NumberD type; };
137 template<>
class ReflectField<int,NumberC> {
public:
typedef NumberC type; };
138 template<>
class ReflectField<int,NumberZ> {
public:
typedef NumberZ type; };
142 template<>
class MatchNumber<NumberS,NumberS> {
public:
typedef NumberS type; };
143 template<>
class MatchNumber<NumberD,NumberD> {
public:
typedef NumberD type; };
144 template<>
class MatchNumber<NumberC,NumberC> {
public:
typedef NumberC type; };
145 template<>
class MatchNumber<NumberZ,NumberZ> {
public:
typedef NumberZ type; };
146 template<>
class MatchNumber<NumberS,int> {
public:
typedef NumberS type; };
147 template<>
class MatchNumber<NumberD,int> {
public:
typedef NumberD type; };
148 template<>
class MatchNumber<NumberC,int> {
public:
typedef NumberC type; };
149 template<>
class MatchNumber<NumberZ,int> {
public:
typedef NumberZ type; };
150 template<>
class MatchNumber<int,NumberS> {
public:
typedef NumberS type; };
151 template<>
class MatchNumber<int,NumberD> {
public:
typedef NumberD type; };
152 template<>
class MatchNumber<int,NumberC> {
public:
typedef NumberC type; };
153 template<>
class MatchNumber<int,NumberZ> {
public:
typedef NumberZ type; };
Reflects Number trait for a Container, containers of Numbers (Matrix's, Vector's, etc) should special...
Definition: Number.h:55
Rules for mixing Number types, template-heavy code uses this to figure out (eg) the resulting type of...
Definition: Number.h:116
Reflectors that raise the Precision of a Number type.
Definition: Number.h:62
const char * typestring()
Returns a const char* (string literal) representing a Number type.
char typechar()
Returns a char representing a Number type.
Reflects a Precision type into a complex type.
Definition: Number.h:46
Reflectors that lower the Precision of a Number type.
Definition: Number.h:73
Reflects Precision trait for a Number, scalar Number types should specialize it.
Definition: Number.h:33
Helper class to make sure that two Number's match.
Definition: Number.h:141
float NumberS
Useful typedefs.
Definition: Number.h:21