MyraMath
arithmetic.h
Go to the documentation of this file.
1 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
2 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
3 // ========================================================================= //
4 
5 #ifndef MYRAMATH_EXPRESSION_ARITHMETIC_H
6 #define MYRAMATH_EXPRESSION_ARITHMETIC_H
7 
13 #include <myramath/MYRAMATH_EXPORT.h>
15 
16 namespace myra {
17 
18 // Forward declarations.
19 template<int Arity, class Number> class Expression;
20 
21 // ---------------------------------- operator+
22 
24 MYRAMATH_EXPORT Expression<1,NumberS> operator+ (const Expression<1,NumberS>& A, const Expression<1,NumberS>& B);
26 MYRAMATH_EXPORT Expression<1,NumberD> operator+ (const Expression<1,NumberD>& A, const Expression<1,NumberD>& B);
27 MYRAMATH_EXPORT Expression<1,NumberC> operator+ (const Expression<1,NumberC>& A, const Expression<1,NumberC>& B);
28 MYRAMATH_EXPORT Expression<1,NumberZ> operator+ (const Expression<1,NumberZ>& A, const Expression<1,NumberZ>& B);
29 MYRAMATH_EXPORT Expression<2,NumberS> operator+ (const Expression<2,NumberS>& A, const Expression<2,NumberS>& B);
30 MYRAMATH_EXPORT Expression<2,NumberD> operator+ (const Expression<2,NumberD>& A, const Expression<2,NumberD>& B);
31 MYRAMATH_EXPORT Expression<2,NumberC> operator+ (const Expression<2,NumberC>& A, const Expression<2,NumberC>& B);
32 MYRAMATH_EXPORT Expression<2,NumberZ> operator+ (const Expression<2,NumberZ>& A, const Expression<2,NumberZ>& B);
34 
36 MYRAMATH_EXPORT Expression<1,NumberS> operator+ (const Expression<1,NumberS>& A, NumberS b);
38 MYRAMATH_EXPORT Expression<1,NumberD> operator+ (const Expression<1,NumberD>& A, NumberD b);
39 MYRAMATH_EXPORT Expression<1,NumberC> operator+ (const Expression<1,NumberC>& A, NumberC b);
40 MYRAMATH_EXPORT Expression<1,NumberZ> operator+ (const Expression<1,NumberZ>& A, NumberZ b);
41 MYRAMATH_EXPORT Expression<2,NumberS> operator+ (const Expression<2,NumberS>& A, NumberS b);
42 MYRAMATH_EXPORT Expression<2,NumberD> operator+ (const Expression<2,NumberD>& A, NumberD b);
43 MYRAMATH_EXPORT Expression<2,NumberC> operator+ (const Expression<2,NumberC>& A, NumberC b);
44 MYRAMATH_EXPORT Expression<2,NumberZ> operator+ (const Expression<2,NumberZ>& A, NumberZ b);
46 
48 MYRAMATH_EXPORT Expression<1,NumberS> operator+ (NumberS a, const Expression<1,NumberS>& B);
50 MYRAMATH_EXPORT Expression<1,NumberD> operator+ (NumberD a, const Expression<1,NumberD>& B);
51 MYRAMATH_EXPORT Expression<1,NumberC> operator+ (NumberC a, const Expression<1,NumberC>& B);
52 MYRAMATH_EXPORT Expression<1,NumberZ> operator+ (NumberZ a, const Expression<1,NumberZ>& B);
53 MYRAMATH_EXPORT Expression<2,NumberS> operator+ (NumberS a, const Expression<2,NumberS>& B);
54 MYRAMATH_EXPORT Expression<2,NumberD> operator+ (NumberD a, const Expression<2,NumberD>& B);
55 MYRAMATH_EXPORT Expression<2,NumberC> operator+ (NumberC a, const Expression<2,NumberC>& B);
56 MYRAMATH_EXPORT Expression<2,NumberZ> operator+ (NumberZ a, const Expression<2,NumberZ>& B);
58 
59 // ---------------------------------- operator-
60 
62 MYRAMATH_EXPORT Expression<1,NumberS> operator- (const Expression<1,NumberS>& A, const Expression<1,NumberS>& B);
64 MYRAMATH_EXPORT Expression<1,NumberD> operator- (const Expression<1,NumberD>& A, const Expression<1,NumberD>& B);
65 MYRAMATH_EXPORT Expression<1,NumberC> operator- (const Expression<1,NumberC>& A, const Expression<1,NumberC>& B);
66 MYRAMATH_EXPORT Expression<1,NumberZ> operator- (const Expression<1,NumberZ>& A, const Expression<1,NumberZ>& B);
67 MYRAMATH_EXPORT Expression<2,NumberS> operator- (const Expression<2,NumberS>& A, const Expression<2,NumberS>& B);
68 MYRAMATH_EXPORT Expression<2,NumberD> operator- (const Expression<2,NumberD>& A, const Expression<2,NumberD>& B);
69 MYRAMATH_EXPORT Expression<2,NumberC> operator- (const Expression<2,NumberC>& A, const Expression<2,NumberC>& B);
70 MYRAMATH_EXPORT Expression<2,NumberZ> operator- (const Expression<2,NumberZ>& A, const Expression<2,NumberZ>& B);
72 
74 MYRAMATH_EXPORT Expression<1,NumberS> operator- (const Expression<1,NumberS>& A, NumberS b);
76 MYRAMATH_EXPORT Expression<1,NumberD> operator- (const Expression<1,NumberD>& A, NumberD b);
77 MYRAMATH_EXPORT Expression<1,NumberC> operator- (const Expression<1,NumberC>& A, NumberC b);
78 MYRAMATH_EXPORT Expression<1,NumberZ> operator- (const Expression<1,NumberZ>& A, NumberZ b);
79 MYRAMATH_EXPORT Expression<2,NumberS> operator- (const Expression<2,NumberS>& A, NumberS b);
80 MYRAMATH_EXPORT Expression<2,NumberD> operator- (const Expression<2,NumberD>& A, NumberD b);
81 MYRAMATH_EXPORT Expression<2,NumberC> operator- (const Expression<2,NumberC>& A, NumberC b);
82 MYRAMATH_EXPORT Expression<2,NumberZ> operator- (const Expression<2,NumberZ>& A, NumberZ b);
84 
86 MYRAMATH_EXPORT Expression<1,NumberS> operator- (NumberS a, const Expression<1,NumberS>& B);
88 MYRAMATH_EXPORT Expression<1,NumberD> operator- (NumberD a, const Expression<1,NumberD>& B);
89 MYRAMATH_EXPORT Expression<1,NumberC> operator- (NumberC a, const Expression<1,NumberC>& B);
90 MYRAMATH_EXPORT Expression<1,NumberZ> operator- (NumberZ a, const Expression<1,NumberZ>& B);
91 MYRAMATH_EXPORT Expression<2,NumberS> operator- (NumberS a, const Expression<2,NumberS>& B);
92 MYRAMATH_EXPORT Expression<2,NumberD> operator- (NumberD a, const Expression<2,NumberD>& B);
93 MYRAMATH_EXPORT Expression<2,NumberC> operator- (NumberC a, const Expression<2,NumberC>& B);
94 MYRAMATH_EXPORT Expression<2,NumberZ> operator- (NumberZ a, const Expression<2,NumberZ>& B);
96 
97 // ---------------------------------- operator*
98 
100 MYRAMATH_EXPORT Expression<1,NumberS> operator* (const Expression<1,NumberS>& A, const Expression<1,NumberS>& B);
102 MYRAMATH_EXPORT Expression<1,NumberD> operator* (const Expression<1,NumberD>& A, const Expression<1,NumberD>& B);
103 MYRAMATH_EXPORT Expression<1,NumberC> operator* (const Expression<1,NumberC>& A, const Expression<1,NumberC>& B);
104 MYRAMATH_EXPORT Expression<1,NumberZ> operator* (const Expression<1,NumberZ>& A, const Expression<1,NumberZ>& B);
105 MYRAMATH_EXPORT Expression<2,NumberS> operator* (const Expression<2,NumberS>& A, const Expression<2,NumberS>& B);
106 MYRAMATH_EXPORT Expression<2,NumberD> operator* (const Expression<2,NumberD>& A, const Expression<2,NumberD>& B);
107 MYRAMATH_EXPORT Expression<2,NumberC> operator* (const Expression<2,NumberC>& A, const Expression<2,NumberC>& B);
108 MYRAMATH_EXPORT Expression<2,NumberZ> operator* (const Expression<2,NumberZ>& A, const Expression<2,NumberZ>& B);
110 
112 MYRAMATH_EXPORT Expression<1,NumberS> operator* (const Expression<1,NumberS>& A, NumberS b);
114 MYRAMATH_EXPORT Expression<1,NumberD> operator* (const Expression<1,NumberD>& A, NumberD b);
115 MYRAMATH_EXPORT Expression<1,NumberC> operator* (const Expression<1,NumberC>& A, NumberC b);
116 MYRAMATH_EXPORT Expression<1,NumberZ> operator* (const Expression<1,NumberZ>& A, NumberZ b);
117 MYRAMATH_EXPORT Expression<2,NumberS> operator* (const Expression<2,NumberS>& A, NumberS b);
118 MYRAMATH_EXPORT Expression<2,NumberD> operator* (const Expression<2,NumberD>& A, NumberD b);
119 MYRAMATH_EXPORT Expression<2,NumberC> operator* (const Expression<2,NumberC>& A, NumberC b);
120 MYRAMATH_EXPORT Expression<2,NumberZ> operator* (const Expression<2,NumberZ>& A, NumberZ b);
122 
124 MYRAMATH_EXPORT Expression<1,NumberS> operator* (NumberS a, const Expression<1,NumberS>& B);
126 MYRAMATH_EXPORT Expression<1,NumberD> operator* (NumberD a, const Expression<1,NumberD>& B);
127 MYRAMATH_EXPORT Expression<1,NumberC> operator* (NumberC a, const Expression<1,NumberC>& B);
128 MYRAMATH_EXPORT Expression<1,NumberZ> operator* (NumberZ a, const Expression<1,NumberZ>& B);
129 MYRAMATH_EXPORT Expression<2,NumberS> operator* (NumberS a, const Expression<2,NumberS>& B);
130 MYRAMATH_EXPORT Expression<2,NumberD> operator* (NumberD a, const Expression<2,NumberD>& B);
131 MYRAMATH_EXPORT Expression<2,NumberC> operator* (NumberC a, const Expression<2,NumberC>& B);
132 MYRAMATH_EXPORT Expression<2,NumberZ> operator* (NumberZ a, const Expression<2,NumberZ>& B);
134 
135 // ---------------------------------- operator/
136 
138 MYRAMATH_EXPORT Expression<1,NumberS> operator/ (const Expression<1,NumberS>& A, const Expression<1,NumberS>& B);
140 MYRAMATH_EXPORT Expression<1,NumberD> operator/ (const Expression<1,NumberD>& A, const Expression<1,NumberD>& B);
141 MYRAMATH_EXPORT Expression<1,NumberC> operator/ (const Expression<1,NumberC>& A, const Expression<1,NumberC>& B);
142 MYRAMATH_EXPORT Expression<1,NumberZ> operator/ (const Expression<1,NumberZ>& A, const Expression<1,NumberZ>& B);
143 MYRAMATH_EXPORT Expression<2,NumberS> operator/ (const Expression<2,NumberS>& A, const Expression<2,NumberS>& B);
144 MYRAMATH_EXPORT Expression<2,NumberD> operator/ (const Expression<2,NumberD>& A, const Expression<2,NumberD>& B);
145 MYRAMATH_EXPORT Expression<2,NumberC> operator/ (const Expression<2,NumberC>& A, const Expression<2,NumberC>& B);
146 MYRAMATH_EXPORT Expression<2,NumberZ> operator/ (const Expression<2,NumberZ>& A, const Expression<2,NumberZ>& B);
148 
150 MYRAMATH_EXPORT Expression<1,NumberS> operator/ (const Expression<1,NumberS>& A, NumberS b);
152 MYRAMATH_EXPORT Expression<1,NumberD> operator/ (const Expression<1,NumberD>& A, NumberD b);
153 MYRAMATH_EXPORT Expression<1,NumberC> operator/ (const Expression<1,NumberC>& A, NumberC b);
154 MYRAMATH_EXPORT Expression<1,NumberZ> operator/ (const Expression<1,NumberZ>& A, NumberZ b);
155 MYRAMATH_EXPORT Expression<2,NumberS> operator/ (const Expression<2,NumberS>& A, NumberS b);
156 MYRAMATH_EXPORT Expression<2,NumberD> operator/ (const Expression<2,NumberD>& A, NumberD b);
157 MYRAMATH_EXPORT Expression<2,NumberC> operator/ (const Expression<2,NumberC>& A, NumberC b);
158 MYRAMATH_EXPORT Expression<2,NumberZ> operator/ (const Expression<2,NumberZ>& A, NumberZ b);
160 
162 MYRAMATH_EXPORT Expression<1,NumberS> operator/ (NumberS a, const Expression<1,NumberS>& B);
164 MYRAMATH_EXPORT Expression<1,NumberD> operator/ (NumberD a, const Expression<1,NumberD>& B);
165 MYRAMATH_EXPORT Expression<1,NumberC> operator/ (NumberC a, const Expression<1,NumberC>& B);
166 MYRAMATH_EXPORT Expression<1,NumberZ> operator/ (NumberZ a, const Expression<1,NumberZ>& B);
167 MYRAMATH_EXPORT Expression<2,NumberS> operator/ (NumberS a, const Expression<2,NumberS>& B);
168 MYRAMATH_EXPORT Expression<2,NumberD> operator/ (NumberD a, const Expression<2,NumberD>& B);
169 MYRAMATH_EXPORT Expression<2,NumberC> operator/ (NumberC a, const Expression<2,NumberC>& B);
170 MYRAMATH_EXPORT Expression<2,NumberZ> operator/ (NumberZ a, const Expression<2,NumberZ>& B);
172 
173 // ---------------------------------- unary operator-
174 
176 MYRAMATH_EXPORT Expression<1,NumberS> operator- (const Expression<1,NumberS>& A);
178 MYRAMATH_EXPORT Expression<1,NumberD> operator- (const Expression<1,NumberD>& A);
179 MYRAMATH_EXPORT Expression<1,NumberC> operator- (const Expression<1,NumberC>& A);
180 MYRAMATH_EXPORT Expression<1,NumberZ> operator- (const Expression<1,NumberZ>& A);
181 MYRAMATH_EXPORT Expression<2,NumberS> operator- (const Expression<2,NumberS>& A);
182 MYRAMATH_EXPORT Expression<2,NumberD> operator- (const Expression<2,NumberD>& A);
183 MYRAMATH_EXPORT Expression<2,NumberC> operator- (const Expression<2,NumberC>& A);
184 MYRAMATH_EXPORT Expression<2,NumberZ> operator- (const Expression<2,NumberZ>& A);
186 
187 // ---------------------------------- operator^
188 
190 MYRAMATH_EXPORT Expression<2,NumberS> operator^ (const Expression<1,NumberS>& A, const Expression<1,NumberS>& B);
192 MYRAMATH_EXPORT Expression<2,NumberD> operator^ (const Expression<1,NumberD>& A, const Expression<1,NumberD>& B);
193 MYRAMATH_EXPORT Expression<2,NumberC> operator^ (const Expression<1,NumberC>& A, const Expression<1,NumberC>& B);
194 MYRAMATH_EXPORT Expression<2,NumberZ> operator^ (const Expression<1,NumberZ>& A, const Expression<1,NumberZ>& B);
196 
197 } // namespace myra
198 
199 #endif
Definition: syntax.dox:1
Various utility functions/classes related to scalar Number types.
Given an index (i,j,etc), returns a value.
Definition: arithmetic.h:19
float NumberS
Useful typedefs.
Definition: Number.h:21