annotate liboctave/MArray-defs.h @ 7948:af10baa63915 ss-3-1-50

3.1.50 snapshot
author John W. Eaton <jwe@octave.org>
date Fri, 18 Jul 2008 17:42:48 -0400
parents 82be108cc558
children b11c31849b44
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
1 /*
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
2
7017
a1dbe9d80eee [project @ 2007-10-12 21:27:11 by jwe]
jwe
parents: 7016
diff changeset
3 Copyright (C) 1996, 1999, 2000, 2003, 2005, 2006, 2007 John W. Eaton
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
4
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
5 This file is part of Octave.
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
6
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
8 under the terms of the GNU General Public License as published by the
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
10 option) any later version.
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
11
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
15 for more details.
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
16
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
17 You should have received a copy of the GNU General Public License
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
18 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
19 <http://www.gnu.org/licenses/>.
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
20
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
21 */
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6708
diff changeset
22
3741
b65077dfa1b1 [project @ 2000-11-29 16:30:01 by jwe]
jwe
parents: 3649
diff changeset
23 #if !defined (octave_MArray_defs_h)
b65077dfa1b1 [project @ 2000-11-29 16:30:01 by jwe]
jwe
parents: 3649
diff changeset
24 #define octave_MArray_defs_h 1
b65077dfa1b1 [project @ 2000-11-29 16:30:01 by jwe]
jwe
parents: 3649
diff changeset
25
3649
3a067b216fd6 [project @ 2000-03-31 06:02:44 by jwe]
jwe
parents: 3581
diff changeset
26 // Nothing like a little CPP abuse to brighten everyone's day.
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
27
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3243
diff changeset
28 #define DO_VS_OP(r, l, v, OP, s) \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
29 if (l > 0) \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
30 { \
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4646
diff changeset
31 for (octave_idx_type i = 0; i < l; i++) \
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3243
diff changeset
32 r[i] = v[i] OP s; \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
33 }
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
34
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3243
diff changeset
35 #define DO_SV_OP(r, l, s, OP, v) \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
36 if (l > 0) \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
37 { \
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4646
diff changeset
38 for (octave_idx_type i = 0; i < l; i++) \
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3243
diff changeset
39 r[i] = s OP v[i]; \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
40 }
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
41
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3243
diff changeset
42 #define DO_VV_OP(r, l, x, OP, y) \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
43 if (l > 0) \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
44 { \
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4646
diff changeset
45 for (octave_idx_type i = 0; i < l; i++) \
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3243
diff changeset
46 r[i] = x[i] OP y[i]; \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
47 }
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
48
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3243
diff changeset
49 #define NEG_V(r, l, x) \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
50 if (l > 0) \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
51 { \
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4646
diff changeset
52 for (octave_idx_type i = 0; i < l; i++) \
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 3243
diff changeset
53 r[i] = -x[i]; \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
54 }
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
55
4646
eff8f977508c [project @ 2003-11-23 18:13:19 by jwe]
jwe
parents: 4543
diff changeset
56 #define DO_VS_OP2(T, a, OP, s) \
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4646
diff changeset
57 octave_idx_type l = a.length (); \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
58 if (l > 0) \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
59 { \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
60 T *tmp = a.fortran_vec (); \
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4646
diff changeset
61 for (octave_idx_type i = 0; i < l; i++) \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
62 tmp[i] OP s; \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
63 }
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
64
4646
eff8f977508c [project @ 2003-11-23 18:13:19 by jwe]
jwe
parents: 4543
diff changeset
65 #define DO_VV_OP2(T, a, OP, b) \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
66 do \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
67 { \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
68 T *a_tmp = a.fortran_vec (); \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
69 const T *b_tmp = b.data (); \
5275
23b37da9fd5b [project @ 2005-04-08 16:07:35 by jwe]
jwe
parents: 4646
diff changeset
70 for (octave_idx_type i = 0; i < l; i++) \
3243
dd00769643ae [project @ 1999-05-28 04:19:00 by jwe]
jwe
parents: 1988
diff changeset
71 a_tmp[i] OP b_tmp[i]; \
1988
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
72 } \
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
73 while (0)
7b56630a1e05 [project @ 1996-03-02 00:33:22 by jwe]
jwe
parents:
diff changeset
74
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
75 // A macro that can be used to declare and instantiate OP= operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
76 #define MARRAY_OP_ASSIGN_DECL(A_T, E_T, OP, PFX, API, LTGT, RHS_T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
77 PFX API A_T<E_T>& \
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
78 operator OP LTGT (A_T<E_T>&, const RHS_T&)
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
79
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
80 // All the OP= operators that we care about.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
81 #define MARRAY_OP_ASSIGN_DECLS(A_T, E_T, PFX, API, LTGT, RHS_T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
82 MARRAY_OP_ASSIGN_DECL (A_T, E_T, +=, PFX, API, LTGT, RHS_T); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
83 MARRAY_OP_ASSIGN_DECL (A_T, E_T, -=, PFX, API, LTGT, RHS_T);
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
84
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
85 // Generate forward declarations for OP= operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
86 #define MARRAY_OP_ASSIGN_FWD_DECLS(A_T, RHS_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
87 MARRAY_OP_ASSIGN_DECLS (A_T, T, template <typename T>, API, , RHS_T)
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
88
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
89 // Generate friend declarations for the OP= operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
90 #define MARRAY_OP_ASSIGN_FRIENDS(A_T, RHS_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
91 MARRAY_OP_ASSIGN_DECLS (A_T, T, friend, API, <>, RHS_T)
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
92
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
93 // Instantiate the OP= operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
94 #define MARRAY_OP_ASSIGN_DEFS(A_T, E_T, RHS_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
95 MARRAY_OP_ASSIGN_DECLS (A_T, E_T, template, API, , RHS_T)
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
96
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
97 // A function that can be used to forward OP= operations from derived
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
98 // classes back to us.
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
99 #define MARRAY_OP_ASSIGN_FWD_FCN(R, F, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
100 inline R \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
101 F (X_T& x, const Y_T& y) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
102 { \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
103 return R (F (C_X (x), C_Y (y))); \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
104 }
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
105
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
106 // All the OP= operators that we care about forwarding.
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
107 #define MARRAY_OP_ASSIGN_FWD_DEFS(R, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
108 MARRAY_OP_ASSIGN_FWD_FCN (R, operator +=, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
109 MARRAY_OP_ASSIGN_FWD_FCN (R, operator -=, T, C_X, X_T, C_Y, Y_T)
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
110
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
111 // A macro that can be used to declare and instantiate unary operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
112 #define MARRAY_UNOP(A_T, E_T, F, PFX, API, LTGT) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
113 PFX API A_T<E_T> \
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
114 F LTGT (const A_T<E_T>&)
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
115
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
116 // All the unary operators that we care about.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
117 #define MARRAY_UNOP_DECLS(A_T, E_T, PFX, API, LTGT) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
118 MARRAY_UNOP (A_T, E_T, operator +, PFX, API, LTGT); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
119 MARRAY_UNOP (A_T, E_T, operator -, PFX, API, LTGT);
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
120
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
121 // Generate forward declarations for unary operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
122 #define MARRAY_UNOP_FWD_DECLS(A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
123 MARRAY_UNOP_DECLS (A_T, T, template <typename T>, API, )
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
124
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
125 // Generate friend declarations for the unary operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
126 #define MARRAY_UNOP_FRIENDS(A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
127 MARRAY_UNOP_DECLS (A_T, T, friend, API, <>)
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
128
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
129 // Instantiate the unary operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
130 #define MARRAY_UNOP_DEFS(A_T, E_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
131 MARRAY_UNOP_DECLS (A_T, E_T, template, API, )
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
132
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
133 // A function that can be used to forward unary operations from derived
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
134 // classes back to us.
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
135 #define MARRAY_UNOP_FWD_FCN(R, F, T, C_X, X_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
136 inline R \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
137 F (const X_T& x) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
138 { \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
139 return R (F (C_X (x))); \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
140 }
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
141
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
142 // All the unary operators that we care about forwarding.
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
143 #define MARRAY_UNOP_FWD_DEFS(R, T, C_X, X_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
144 MARRAY_UNOP_FWD_FCN (R, operator +, T, C_X, X_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
145 MARRAY_UNOP_FWD_FCN (R, operator -, T, C_X, X_T)
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
146
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
147 // A macro that can be used to declare and instantiate binary operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
148 #define MARRAY_BINOP_DECL(A_T, E_T, F, PFX, API, LTGT, X_T, Y_T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
149 PFX API A_T<E_T> \
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
150 F LTGT (const X_T&, const Y_T&)
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
151
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
152 // All the binary operators that we care about. We have two
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
153 // sets of macros since the MArray OP MArray operations use functions
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
154 // (product and quotient) instead of operators (*, /).
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
155 #define MARRAY_BINOP_DECLS(A_T, E_T, PFX, API, LTGT, X_T, Y_T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
156 MARRAY_BINOP_DECL (A_T, E_T, operator +, PFX, API, LTGT, X_T, Y_T); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
157 MARRAY_BINOP_DECL (A_T, E_T, operator -, PFX, API, LTGT, X_T, Y_T); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
158 MARRAY_BINOP_DECL (A_T, E_T, operator *, PFX, API, LTGT, X_T, Y_T); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
159 MARRAY_BINOP_DECL (A_T, E_T, operator /, PFX, API, LTGT, X_T, Y_T);
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
160
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
161 #define MARRAY_AA_BINOP_DECLS(A_T, E_T, PFX, API, LTGT) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
162 MARRAY_BINOP_DECL (A_T, E_T, operator +, PFX, API, LTGT, A_T<E_T>, A_T<E_T>); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
163 MARRAY_BINOP_DECL (A_T, E_T, operator -, PFX, API, LTGT, A_T<E_T>, A_T<E_T>); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
164 MARRAY_BINOP_DECL (A_T, E_T, quotient, PFX, API, LTGT, A_T<E_T>, A_T<E_T>); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
165 MARRAY_BINOP_DECL (A_T, E_T, product, PFX, API, LTGT, A_T<E_T>, A_T<E_T>);
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
166
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
167 #define MDIAGARRAY2_DAS_BINOP_DECLS(A_T, E_T, PFX, API, LTGT, X_T, Y_T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
168 MARRAY_BINOP_DECL (A_T, E_T, operator *, PFX, API, LTGT, X_T, Y_T); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
169 MARRAY_BINOP_DECL (A_T, E_T, operator /, PFX, API, LTGT, X_T, Y_T);
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
170
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
171 #define MDIAGARRAY2_SDA_BINOP_DECLS(A_T, E_T, PFX, API, LTGT, X_T, Y_T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
172 MARRAY_BINOP_DECL (A_T, E_T, operator *, PFX, API, LTGT, X_T, Y_T);
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
173
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
174 #define MDIAGARRAY2_DADA_BINOP_DECLS(A_T, E_T, PFX, API, LTGT) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
175 MARRAY_BINOP_DECL (A_T, E_T, operator +, PFX, API, LTGT, A_T<E_T>, A_T<E_T>); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
176 MARRAY_BINOP_DECL (A_T, E_T, operator -, PFX, API, LTGT, A_T<E_T>, A_T<E_T>); \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
177 MARRAY_BINOP_DECL (A_T, E_T, product, PFX, API, LTGT, A_T<E_T>, A_T<E_T>);
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
178
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
179 // Generate forward declarations for binary operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
180 #define MARRAY_BINOP_FWD_DECLS(A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
181 MARRAY_BINOP_DECLS (A_T, T, template <typename T>, API, , A_T<T>, T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
182 MARRAY_BINOP_DECLS (A_T, T, template <typename T>, API, , T, A_T<T>) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
183 MARRAY_AA_BINOP_DECLS (A_T, T, template <typename T>, API, )
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
184
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
185 #define MDIAGARRAY2_BINOP_FWD_DECLS(A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
186 MDIAGARRAY2_DAS_BINOP_DECLS (A_T, T, template <typename T>, API, , A_T<T>, T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
187 MDIAGARRAY2_SDA_BINOP_DECLS (A_T, T, template <typename T>, API, , T, A_T<T>) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
188 MDIAGARRAY2_DADA_BINOP_DECLS (A_T, T, template <typename T>, API, )
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
189
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
190 // Generate friend declarations for the binary operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
191 #define MARRAY_BINOP_FRIENDS(A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
192 MARRAY_BINOP_DECLS (A_T, T, friend, API, <>, A_T<T>, T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
193 MARRAY_BINOP_DECLS (A_T, T, friend, API, <>, T, A_T<T>) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
194 MARRAY_AA_BINOP_DECLS (A_T, T, friend, API, <>)
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
195
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
196 #define MDIAGARRAY2_BINOP_FRIENDS(A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
197 MDIAGARRAY2_DAS_BINOP_DECLS (A_T, T, friend, API, <>, A_T<T>, T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
198 MDIAGARRAY2_SDA_BINOP_DECLS (A_T, T, friend, API, <>, T, A_T<T>) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
199 MDIAGARRAY2_DADA_BINOP_DECLS (A_T, T, friend, API, <>)
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
200
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
201 // Instantiate the binary operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
202 #define MARRAY_BINOP_DEFS(A_T, E_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
203 MARRAY_BINOP_DECLS (A_T, E_T, template, API, , A_T<E_T>, E_T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
204 MARRAY_BINOP_DECLS (A_T, E_T, template, API, , E_T, A_T<E_T>) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
205 MARRAY_AA_BINOP_DECLS (A_T, E_T, template, API, )
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
206
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
207 #define MDIAGARRAY2_BINOP_DEFS(A_T, E_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
208 MDIAGARRAY2_DAS_BINOP_DECLS (A_T, E_T, template, API, , A_T<E_T>, E_T) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
209 MDIAGARRAY2_SDA_BINOP_DECLS (A_T, E_T, template, API, , E_T, A_T<E_T>) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
210 MDIAGARRAY2_DADA_BINOP_DECLS (A_T, E_T, template, API, )
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
211
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
212 // A function that can be used to forward binary operations from derived
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
213 // classes back to us.
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
214 #define MARRAY_BINOP_FWD_FCN(R, F, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
215 inline R \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
216 F (const X_T& x, const Y_T& y) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
217 { \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
218 return R (F (C_X (x), C_Y (y))); \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
219 }
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
220
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
221 // The binary operators that we care about forwarding. We have two
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
222 // sets of macros since the MArray OP MArray operations use functions
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
223 // (product and quotient) instead of operators (*, /).
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
224 #define MARRAY_BINOP_FWD_DEFS(R, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
225 MARRAY_BINOP_FWD_FCN (R, operator +, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
226 MARRAY_BINOP_FWD_FCN (R, operator -, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
227 MARRAY_BINOP_FWD_FCN (R, operator *, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
228 MARRAY_BINOP_FWD_FCN (R, operator /, T, C_X, X_T, C_Y, Y_T)
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
229
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
230 #define MARRAY_AA_BINOP_FWD_DEFS(R, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
231 MARRAY_BINOP_FWD_FCN (R, operator +, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
232 MARRAY_BINOP_FWD_FCN (R, operator -, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
233 MARRAY_BINOP_FWD_FCN (R, product, T, C_X, X_T, C_Y, Y_T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
234 MARRAY_BINOP_FWD_FCN (R, quotient, T, C_X, X_T, C_Y, Y_T)
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
235
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
236 #define MDIAGARRAY2_DAS_BINOP_FWD_DEFS(R, T, C_X, X_T, C_Y, Y_T) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
237 MARRAY_BINOP_FWD_FCN (R, operator *, T, C_X, X_T, C_Y, Y_T) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
238 MARRAY_BINOP_FWD_FCN (R, operator /, T, C_X, X_T, C_Y, Y_T)
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
239
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
240 #define MDIAGARRAY2_SDA_BINOP_FWD_DEFS(R, T, C_X, X_T, C_Y, Y_T) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
241 MARRAY_BINOP_FWD_FCN (R, operator *, T, C_X, X_T, C_Y, Y_T)
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
242
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
243 #define MDIAGARRAY2_DADA_BINOP_FWD_DEFS(R, T, C_X, X_T, C_Y, Y_T) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
244 MARRAY_BINOP_FWD_FCN (R, operator +, T, C_X, X_T, C_Y, Y_T) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
245 MARRAY_BINOP_FWD_FCN (R, operator -, T, C_X, X_T, C_Y, Y_T) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
246 MARRAY_BINOP_FWD_FCN (R, product, T, C_X, X_T, C_Y, Y_T)
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
247
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
248 // Forward declarations for the MArray operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
249 #define MARRAY_OPS_FORWARD_DECLS(A_T, API) \
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
250 template <class T> \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
251 class A_T; \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
252 \
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
253 MARRAY_OP_ASSIGN_FWD_DECLS (A_T, T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
254 MARRAY_OP_ASSIGN_FWD_DECLS (A_T, A_T<T>, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
255 MARRAY_UNOP_FWD_DECLS (A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
256 MARRAY_BINOP_FWD_DECLS (A_T, API)
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
257
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
258 #define MDIAGARRAY2_OPS_FORWARD_DECLS(A_T, API) \
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
259 template <class T> \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
260 class A_T; \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
261 \
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
262 MARRAY_OP_ASSIGN_FWD_DECLS (A_T, A_T<T>, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
263 MARRAY_UNOP_FWD_DECLS (A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
264 MDIAGARRAY2_BINOP_FWD_DECLS (A_T, API)
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
265
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
266 // Friend declarations for the MArray operators.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
267 #define MARRAY_OPS_FRIEND_DECLS(A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
268 MARRAY_OP_ASSIGN_FRIENDS (A_T, T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
269 MARRAY_OP_ASSIGN_FRIENDS (A_T, A_T<T>, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
270 MARRAY_UNOP_FRIENDS (A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
271 MARRAY_BINOP_FRIENDS (A_T, API)
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
272
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
273 #define MDIAGARRAY2_OPS_FRIEND_DECLS(A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
274 MARRAY_OP_ASSIGN_FRIENDS (A_T, A_T<T>, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
275 MARRAY_UNOP_FRIENDS (A_T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
276 MDIAGARRAY2_BINOP_FRIENDS (A_T, API)
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
277
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
278 // The following macros are for external use.
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
279
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
280 // Instantiate all the MArray friends for MArray element type T.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
281 #define INSTANTIATE_MARRAY_FRIENDS(T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
282 MARRAY_OP_ASSIGN_DEFS (MArray, T, T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
283 MARRAY_OP_ASSIGN_DEFS (MArray, T, MArray<T>, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
284 MARRAY_UNOP_DEFS (MArray, T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
285 MARRAY_BINOP_DEFS (MArray, T, API)
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
286
4513
508238e65af7 [project @ 2003-09-19 21:40:57 by jwe]
jwe
parents: 3741
diff changeset
287 // Instantiate all the MArray2 friends for MArray2 element type T.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
288 #define INSTANTIATE_MARRAY2_FRIENDS(T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
289 MARRAY_OP_ASSIGN_DEFS (MArray2, T, T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
290 MARRAY_OP_ASSIGN_DEFS (MArray2, T, MArray2<T>, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
291 MARRAY_UNOP_DEFS (MArray2, T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
292 MARRAY_BINOP_DEFS (MArray2, T, API)
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
293
4513
508238e65af7 [project @ 2003-09-19 21:40:57 by jwe]
jwe
parents: 3741
diff changeset
294 // Instantiate all the MArrayN friends for MArrayN element type T.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
295 #define INSTANTIATE_MARRAYN_FRIENDS(T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
296 MARRAY_OP_ASSIGN_DEFS (MArrayN, T, T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
297 MARRAY_OP_ASSIGN_DEFS (MArrayN, T, MArrayN<T>, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
298 MARRAY_UNOP_DEFS (MArrayN, T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
299 MARRAY_BINOP_DEFS (MArrayN, T, API)
4513
508238e65af7 [project @ 2003-09-19 21:40:57 by jwe]
jwe
parents: 3741
diff changeset
300
508238e65af7 [project @ 2003-09-19 21:40:57 by jwe]
jwe
parents: 3741
diff changeset
301 // Instantiate all the MDiagArray2 friends for MDiagArray2 element type T.
6708
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
302 #define INSTANTIATE_MDIAGARRAY2_FRIENDS(T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
303 MARRAY_OP_ASSIGN_DEFS (MDiagArray2, T, MDiagArray2<T>, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
304 MARRAY_UNOP_DEFS (MDiagArray2, T, API) \
0ce71beb1cf3 [project @ 2007-06-13 06:40:48 by jwe]
jwe
parents: 6508
diff changeset
305 MDIAGARRAY2_BINOP_DEFS (MDiagArray2, T, API)
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
306
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
307 // Define all the MArray forwarding functions for return type R and
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
308 // MArray element type T
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
309 #define MARRAY_FORWARD_DEFS(B, R, T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
310 MARRAY_OP_ASSIGN_FWD_DEFS \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
311 (R, T, dynamic_cast<B<T>&>, R, , T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
312 \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
313 MARRAY_OP_ASSIGN_FWD_DEFS \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
314 (R, T, \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
315 dynamic_cast<B<T>&>, R, dynamic_cast<const B<T>&>, R) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
316 \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
317 MARRAY_UNOP_FWD_DEFS \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
318 (R, T, dynamic_cast<const B<T>&>, R) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
319 \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
320 MARRAY_BINOP_FWD_DEFS \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
321 (R, T, dynamic_cast<const B<T>&>, R, , T) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
322 \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
323 MARRAY_BINOP_FWD_DEFS \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
324 (R, T, , T, dynamic_cast<const B<T>&>, R) \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
325 \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
326 MARRAY_AA_BINOP_FWD_DEFS \
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
327 (R, T, dynamic_cast<const B<T>&>, R, dynamic_cast<const B<T>&>, R)
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
328
3580
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
329 #define MDIAGARRAY2_FORWARD_DEFS(B, R, T) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
330 MARRAY_OP_ASSIGN_FWD_DEFS \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
331 (R, T, \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
332 dynamic_cast<B<T>&>, R, dynamic_cast<const B<T>&>, R) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
333 \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
334 MARRAY_UNOP_FWD_DEFS \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
335 (R, T, dynamic_cast<const B<T>&>, R) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
336 \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
337 MDIAGARRAY2_DAS_BINOP_FWD_DEFS \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
338 (R, T, dynamic_cast<const B<T>&>, R, , T) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
339 \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
340 MDIAGARRAY2_SDA_BINOP_FWD_DEFS \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
341 (R, T, , T, dynamic_cast<const B<T>&>, R) \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
342 \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
343 MDIAGARRAY2_DADA_BINOP_FWD_DEFS \
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
344 (R, T, dynamic_cast<const B<T>&>, R, dynamic_cast<const B<T>&>, R)
2923f52d8fda [project @ 2000-02-05 07:14:21 by jwe]
jwe
parents: 3574
diff changeset
345
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7101
diff changeset
346 #define MARRAY_NORM_BODY(TYPE, RTYPE, blas_norm, BLAS_NORM, NAN_VALUE) \
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
347 \
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7101
diff changeset
348 RTYPE retval = NAN_VALUE; \
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
349 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
350 octave_idx_type len = length (); \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
351 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
352 if (len > 0) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
353 { \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
354 const TYPE *d = data (); \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
355 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
356 if (p == -1) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
357 { \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
358 /* Frobenius norm. */ \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
359 retval = 0; \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
360 \
7101
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
361 /* precondition */ \
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7101
diff changeset
362 RTYPE inf_norm = 0.; \
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
363 for (octave_idx_type i = 0; i < len; i++) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
364 { \
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7101
diff changeset
365 RTYPE d_abs = std::abs (d[i]); \
7101
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
366 if (d_abs > inf_norm) \
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
367 inf_norm = d_abs; \
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
368 } \
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
369 inf_norm = (inf_norm == octave_Inf || inf_norm == 0. ? 1.0 : \
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
370 inf_norm); \
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7101
diff changeset
371 RTYPE scale = 1. / inf_norm; \
7101
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
372 \
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
373 for (octave_idx_type i = 0; i < len; i++) \
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
374 { \
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7101
diff changeset
375 RTYPE d_abs = std::abs (d[i]) * scale; \
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
376 retval += d_abs * d_abs; \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
377 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
378 \
7101
2c5b14c60c6c [project @ 2007-11-06 16:26:13 by jwe]
jwe
parents: 7017
diff changeset
379 retval = ::sqrt (retval) * inf_norm; \
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
380 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
381 else if (p == 2) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
382 F77_FCN (blas_norm, BLAS_NORM) (len, d, 1, retval); \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
383 else if (xisinf (p)) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
384 { \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
385 octave_idx_type i = 0; \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
386 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
387 while (i < len && xisnan (d[i])) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
388 i++; \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
389 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
390 if (i < len) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
391 retval = std::abs (d[i]); \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
392 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
393 if (p > 0) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
394 { \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
395 while (i < len) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
396 { \
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7101
diff changeset
397 RTYPE d_abs = std::abs (d[i++]); \
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
398 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
399 if (d_abs > retval) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
400 retval = d_abs; \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
401 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
402 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
403 else \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
404 { \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
405 while (i < len) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
406 { \
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7101
diff changeset
407 RTYPE d_abs = std::abs (d[i++]); \
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
408 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
409 if (d_abs < retval) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
410 retval = d_abs; \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
411 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
412 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
413 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
414 else \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
415 { \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
416 retval = 0; \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
417 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
418 for (octave_idx_type i = 0; i < len; i++) \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
419 { \
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7101
diff changeset
420 RTYPE d_abs = std::abs (d[i]); \
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
421 retval += pow (d_abs, p); \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
422 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
423 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
424 retval = pow (retval, 1/p); \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
425 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
426 } \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
427 \
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
428 return retval
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 6108
diff changeset
429
3573
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
430 // Now we have all the definitions we need.
6ae6f1180e62 [project @ 2000-02-04 09:01:59 by jwe]
jwe
parents: 3504
diff changeset
431
3741
b65077dfa1b1 [project @ 2000-11-29 16:30:01 by jwe]
jwe
parents: 3649
diff changeset
432 #endif