Mercurial > hg > octave-nkf
comparison liboctave/MArray-decl.h @ 9557:3a1dd361f978
optimize .*=, ./= operators
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Mon, 24 Aug 2009 09:45:34 +0200 |
parents | 1beb23d2b892 |
children | b47ab50a6aa8 |
comparison
equal
deleted
inserted
replaced
9556:948795dc1974 | 9557:3a1dd361f978 |
---|---|
26 // A macro that can be used to declare and instantiate OP= operators. | 26 // A macro that can be used to declare and instantiate OP= operators. |
27 #define MARRAY_OP_ASSIGN_DECL(A_T, E_T, OP, PFX, API, LTGT, RHS_T) \ | 27 #define MARRAY_OP_ASSIGN_DECL(A_T, E_T, OP, PFX, API, LTGT, RHS_T) \ |
28 PFX API A_T<E_T>& \ | 28 PFX API A_T<E_T>& \ |
29 operator OP LTGT (A_T<E_T>&, const RHS_T&) | 29 operator OP LTGT (A_T<E_T>&, const RHS_T&) |
30 | 30 |
31 #define MARRAY_OP_ASSIGN_DECLX(A_T, E_T, OP, PFX, API, LTGT, RHS_T) \ | |
32 PFX API A_T<E_T>& \ | |
33 OP LTGT (A_T<E_T>&, const RHS_T&) | |
34 | |
31 // All the OP= operators that we care about. | 35 // All the OP= operators that we care about. |
32 #define MARRAY_OP_ASSIGN_DECLS(A_T, E_T, PFX, API, LTGT, RHS_T) \ | 36 #define MARRAY_OP_ASSIGN_DECLS(A_T, E_T, PFX, API, LTGT, RHS_T) \ |
33 MARRAY_OP_ASSIGN_DECL (A_T, E_T, +=, PFX, API, LTGT, RHS_T); \ | 37 MARRAY_OP_ASSIGN_DECL (A_T, E_T, +=, PFX, API, LTGT, RHS_T); \ |
34 MARRAY_OP_ASSIGN_DECL (A_T, E_T, -=, PFX, API, LTGT, RHS_T); | 38 MARRAY_OP_ASSIGN_DECL (A_T, E_T, -=, PFX, API, LTGT, RHS_T); \ |
39 MARRAY_OP_ASSIGN_DECLX (A_T, E_T, product_eq, PFX, API, LTGT, RHS_T); \ | |
40 MARRAY_OP_ASSIGN_DECLX (A_T, E_T, quotient_eq, PFX, API, LTGT, RHS_T); | |
35 | 41 |
36 #define MARRAY_OP_ASSIGN_DECLS1(A_T, E_T, PFX, API, LTGT, RHS_T) \ | 42 #define MARRAY_OP_ASSIGN_DECLS1(A_T, E_T, PFX, API, LTGT, RHS_T) \ |
37 MARRAY_OP_ASSIGN_DECL (A_T, E_T, +=, PFX, API, LTGT, RHS_T); \ | 43 MARRAY_OP_ASSIGN_DECL (A_T, E_T, +=, PFX, API, LTGT, RHS_T); \ |
38 MARRAY_OP_ASSIGN_DECL (A_T, E_T, -=, PFX, API, LTGT, RHS_T); \ | 44 MARRAY_OP_ASSIGN_DECL (A_T, E_T, -=, PFX, API, LTGT, RHS_T); \ |
39 MARRAY_OP_ASSIGN_DECL (A_T, E_T, *=, PFX, API, LTGT, RHS_T); \ | 45 MARRAY_OP_ASSIGN_DECL (A_T, E_T, *=, PFX, API, LTGT, RHS_T); \ |
63 } | 69 } |
64 | 70 |
65 // All the OP= operators that we care about forwarding. | 71 // All the OP= operators that we care about forwarding. |
66 #define MARRAY_OP_ASSIGN_FWD_DEFS(R, T, C_X, X_T, C_Y, Y_T) \ | 72 #define MARRAY_OP_ASSIGN_FWD_DEFS(R, T, C_X, X_T, C_Y, Y_T) \ |
67 MARRAY_OP_ASSIGN_FWD_FCN (R, operator +=, T, C_X, X_T, C_Y, Y_T) \ | 73 MARRAY_OP_ASSIGN_FWD_FCN (R, operator +=, T, C_X, X_T, C_Y, Y_T) \ |
68 MARRAY_OP_ASSIGN_FWD_FCN (R, operator -=, T, C_X, X_T, C_Y, Y_T) | 74 MARRAY_OP_ASSIGN_FWD_FCN (R, operator -=, T, C_X, X_T, C_Y, Y_T) \ |
75 MARRAY_OP_ASSIGN_FWD_FCN (R, product_eq, T, C_X, X_T, C_Y, Y_T) \ | |
76 MARRAY_OP_ASSIGN_FWD_FCN (R, quotient_eq, T, C_X, X_T, C_Y, Y_T) | |
69 | 77 |
70 #define MARRAY_OP_ASSIGN_FWD_DEFS1(R, T, C_X, X_T, C_Y, Y_T) \ | 78 #define MARRAY_OP_ASSIGN_FWD_DEFS1(R, T, C_X, X_T, C_Y, Y_T) \ |
71 MARRAY_OP_ASSIGN_FWD_FCN (R, operator +=, T, C_X, X_T, C_Y, Y_T) \ | 79 MARRAY_OP_ASSIGN_FWD_FCN (R, operator +=, T, C_X, X_T, C_Y, Y_T) \ |
72 MARRAY_OP_ASSIGN_FWD_FCN (R, operator -=, T, C_X, X_T, C_Y, Y_T) \ | 80 MARRAY_OP_ASSIGN_FWD_FCN (R, operator -=, T, C_X, X_T, C_Y, Y_T) \ |
73 MARRAY_OP_ASSIGN_FWD_FCN (R, operator *=, T, C_X, X_T, C_Y, Y_T) \ | 81 MARRAY_OP_ASSIGN_FWD_FCN (R, operator *=, T, C_X, X_T, C_Y, Y_T) \ |
207 | 215 |
208 #define MDIAGARRAY2_OPS_FORWARD_DECLS(A_T, API) \ | 216 #define MDIAGARRAY2_OPS_FORWARD_DECLS(A_T, API) \ |
209 template <class T> \ | 217 template <class T> \ |
210 class A_T; \ | 218 class A_T; \ |
211 \ | 219 \ |
212 MARRAY_OP_ASSIGN_FWD_DECLS (A_T, A_T<T>, API) \ | |
213 MARRAY_UNOP_FWD_DECLS (A_T, API) \ | 220 MARRAY_UNOP_FWD_DECLS (A_T, API) \ |
214 MDIAGARRAY2_BINOP_FWD_DECLS (A_T, API) | 221 MDIAGARRAY2_BINOP_FWD_DECLS (A_T, API) |
215 | 222 |
216 // Friend declarations for the MArray operators. | 223 // Friend declarations for the MArray operators. |
217 #define MARRAY_OPS_FRIEND_DECLS(A_T, API) \ | 224 #define MARRAY_OPS_FRIEND_DECLS(A_T, API) \ |
226 MDIAGARRAY2_BINOP_FRIENDS (A_T, API) | 233 MDIAGARRAY2_BINOP_FRIENDS (A_T, API) |
227 | 234 |
228 // Define all the MArray forwarding functions for return type R and | 235 // Define all the MArray forwarding functions for return type R and |
229 // MArray element type T | 236 // MArray element type T |
230 #define MARRAY_FORWARD_DEFS(B, R, T) \ | 237 #define MARRAY_FORWARD_DEFS(B, R, T) \ |
231 MARRAY_OP_ASSIGN_FWD_DEFS \ | 238 MARRAY_OP_ASSIGN_FWD_DEFS1 \ |
232 (R, T, dynamic_cast<B<T>&>, R, , T) \ | 239 (R, T, dynamic_cast<B<T>&>, R, , T) \ |
233 \ | 240 \ |
234 MARRAY_OP_ASSIGN_FWD_DEFS \ | 241 MARRAY_OP_ASSIGN_FWD_DEFS \ |
235 (R, T, \ | 242 (R, T, \ |
236 dynamic_cast<B<T>&>, R, dynamic_cast<const B<T>&>, R) \ | 243 dynamic_cast<B<T>&>, R, dynamic_cast<const B<T>&>, R) \ |
246 \ | 253 \ |
247 MARRAY_AA_BINOP_FWD_DEFS \ | 254 MARRAY_AA_BINOP_FWD_DEFS \ |
248 (R, T, dynamic_cast<const B<T>&>, R, dynamic_cast<const B<T>&>, R) | 255 (R, T, dynamic_cast<const B<T>&>, R, dynamic_cast<const B<T>&>, R) |
249 | 256 |
250 #define MDIAGARRAY2_FORWARD_DEFS(B, R, T) \ | 257 #define MDIAGARRAY2_FORWARD_DEFS(B, R, T) \ |
251 MARRAY_OP_ASSIGN_FWD_DEFS \ | |
252 (R, T, \ | |
253 dynamic_cast<B<T>&>, R, dynamic_cast<const B<T>&>, R) \ | |
254 \ | |
255 MARRAY_UNOP_FWD_DEFS \ | 258 MARRAY_UNOP_FWD_DEFS \ |
256 (R, T, dynamic_cast<const B<T>&>, R) \ | 259 (R, T, dynamic_cast<const B<T>&>, R) \ |
257 \ | 260 \ |
258 MDIAGARRAY2_DAS_BINOP_FWD_DEFS \ | 261 MDIAGARRAY2_DAS_BINOP_FWD_DEFS \ |
259 (R, T, dynamic_cast<const B<T>&>, R, , T) \ | 262 (R, T, dynamic_cast<const B<T>&>, R, , T) \ |