Mercurial > hg > octave-lyh
annotate liboctave/MArray.cc @ 10010:c5e9931c7ba7
Correctly produce postcript output for geometryimages when QHULL library is not present
author | Rik <rdrider0-list@yahoo.com> |
---|---|
date | Sun, 20 Dec 2009 17:02:57 -0800 |
parents | 47c5af1868df |
children | 4c0cdbe0acca |
rev | line source |
---|---|
237 | 1 /* |
2 | |
7017 | 3 Copyright (C) 1993, 1995, 1996, 1997, 2000, 2002, 2003, 2004, 2005, |
8920 | 4 2007, 2008 John W. Eaton |
8934
c2099a4d12ea
partially optimize accumarray
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
5 Copyright (C) 2009 VZLU Prague |
237 | 6 |
7 This file is part of Octave. | |
8 | |
9 Octave is free software; you can redistribute it and/or modify it | |
10 under the terms of the GNU General Public License as published by the | |
7016 | 11 Free Software Foundation; either version 3 of the License, or (at your |
12 option) any later version. | |
237 | 13 |
14 Octave is distributed in the hope that it will be useful, but WITHOUT | |
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
17 for more details. | |
18 | |
19 You should have received a copy of the GNU General Public License | |
7016 | 20 along with Octave; see the file COPYING. If not, see |
21 <http://www.gnu.org/licenses/>. | |
237 | 22 |
23 */ | |
24 | |
25 #ifdef HAVE_CONFIG_H | |
1192 | 26 #include <config.h> |
237 | 27 #endif |
28 | |
29 #include "MArray.h" | |
4669 | 30 #include "Array-util.h" |
237 | 31 #include "lo-error.h" |
32 | |
1989 | 33 #include "MArray-defs.h" |
1213 | 34 |
1360 | 35 // One dimensional array with math ops. |
237 | 36 |
6508 | 37 template <class T> |
38 double | |
39 MArray<T>::norm (double) const | |
40 { | |
41 (*current_liboctave_error_handler) | |
42 ("norm: only implemented for double and complex values"); | |
43 | |
44 return 0; | |
45 } | |
46 | |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
47 template <class T> |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
48 float |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
49 MArray<T>::norm (float) const |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
50 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
51 (*current_liboctave_error_handler) |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
52 ("norm: only implemented for double and complex values"); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
53 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
54 return 0; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
55 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
56 |
237 | 57 // Element by element MArray by scalar ops. |
58 | |
59 template <class T> | |
1213 | 60 MArray<T>& |
1230 | 61 operator += (MArray<T>& a, const T& s) |
237 | 62 { |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
63 if (a.is_shared ()) |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
64 a = a + s; |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
65 else |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
66 do_ms_inplace_op<MArray<T>, T> (a, s, mx_inline_add2); |
1230 | 67 return a; |
237 | 68 } |
69 | |
70 template <class T> | |
1213 | 71 MArray<T>& |
1230 | 72 operator -= (MArray<T>& a, const T& s) |
237 | 73 { |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
74 if (a.is_shared ()) |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
75 a = a - s; |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
76 else |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
77 do_ms_inplace_op<MArray<T>, T> (a, s, mx_inline_sub2); |
1230 | 78 return a; |
237 | 79 } |
80 | |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
81 template <class T> |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
82 MArray<T>& |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
83 operator *= (MArray<T>& a, const T& s) |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
84 { |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
85 if (a.is_shared ()) |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
86 a = a * s; |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
87 else |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
88 do_ms_inplace_op<MArray<T>, T> (a, s, mx_inline_mul2); |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
89 return a; |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
90 } |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
91 |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
92 template <class T> |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
93 MArray<T>& |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
94 operator /= (MArray<T>& a, const T& s) |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
95 { |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
96 if (a.is_shared ()) |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
97 a = a / s; |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
98 else |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
99 do_ms_inplace_op<MArray<T>, T> (a, s, mx_inline_div2); |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
100 return a; |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
101 } |
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
102 |
237 | 103 // Element by element MArray by MArray ops. |
104 | |
105 template <class T> | |
1213 | 106 MArray<T>& |
1230 | 107 operator += (MArray<T>& a, const MArray<T>& b) |
237 | 108 { |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
109 if (a.is_shared ()) |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
110 a = a + b; |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
111 else |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
112 do_mm_inplace_op<MArray<T>, MArray<T> > (a, b, mx_inline_add2, "+="); |
1230 | 113 return a; |
237 | 114 } |
115 | |
116 template <class T> | |
1213 | 117 MArray<T>& |
1230 | 118 operator -= (MArray<T>& a, const MArray<T>& b) |
237 | 119 { |
9546
1beb23d2b892
optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents:
8934
diff
changeset
|
120 if (a.is_shared ()) |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
121 a = a - b; |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
122 else |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
123 do_mm_inplace_op<MArray<T>, MArray<T> > (a, b, mx_inline_sub2, "-="); |
1230 | 124 return a; |
237 | 125 } |
126 | |
9557
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
127 template <class T> |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
128 MArray<T>& |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
129 product_eq (MArray<T>& a, const MArray<T>& b) |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
130 { |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
131 if (a.is_shared ()) |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
132 return a = product (a, b); |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
133 else |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
134 do_mm_inplace_op<MArray<T>, MArray<T> > (a, b, mx_inline_mul2, ".*="); |
9557
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
135 return a; |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
136 } |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
137 |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
138 template <class T> |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
139 MArray<T>& |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
140 quotient_eq (MArray<T>& a, const MArray<T>& b) |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
141 { |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
142 if (a.is_shared ()) |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
143 return a = quotient (a, b); |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
144 else |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
145 do_mm_inplace_op<MArray<T>, MArray<T> > (a, b, mx_inline_div2, "./="); |
9557
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
146 return a; |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
147 } |
3a1dd361f978
optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9546
diff
changeset
|
148 |
1213 | 149 // Element by element MArray by scalar ops. |
150 | |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
151 #define MARRAY_AS_OP(OP, FN) \ |
1213 | 152 template <class T> \ |
153 MArray<T> \ | |
154 operator OP (const MArray<T>& a, const T& s) \ | |
155 { \ | |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
156 return do_ms_binary_op<MArray<T>, MArray<T>, T> (a, s, FN); \ |
1213 | 157 } |
237 | 158 |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
159 MARRAY_AS_OP (+, mx_inline_add) |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
160 MARRAY_AS_OP (-, mx_inline_sub) |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
161 MARRAY_AS_OP (*, mx_inline_mul) |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
162 MARRAY_AS_OP (/, mx_inline_div) |
1213 | 163 |
164 // Element by element scalar by MArray ops. | |
237 | 165 |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
166 #define MARRAY_SA_OP(OP, FN) \ |
1213 | 167 template <class T> \ |
168 MArray<T> \ | |
169 operator OP (const T& s, const MArray<T>& a) \ | |
170 { \ | |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
171 return do_sm_binary_op<MArray<T>, T, MArray<T> > (s, a, FN); \ |
3504 | 172 } |
237 | 173 |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
174 MARRAY_SA_OP(+, mx_inline_add) |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
175 MARRAY_SA_OP(-, mx_inline_sub) |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
176 MARRAY_SA_OP(*, mx_inline_mul) |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
177 MARRAY_SA_OP(/, mx_inline_div) |
1213 | 178 |
179 // Element by element MArray by MArray ops. | |
237 | 180 |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
181 #define MARRAY_AA_OP(FCN, OP, FN) \ |
1213 | 182 template <class T> \ |
183 MArray<T> \ | |
184 FCN (const MArray<T>& a, const MArray<T>& b) \ | |
185 { \ | |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
186 return do_mm_binary_op<MArray<T>, MArray<T>, MArray<T> > (a, b, FN, #FCN); \ |
1213 | 187 } |
237 | 188 |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
189 MARRAY_AA_OP (operator +, +, mx_inline_add) |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
190 MARRAY_AA_OP (operator -, -, mx_inline_sub) |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
191 MARRAY_AA_OP (product, *, mx_inline_mul) |
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
192 MARRAY_AA_OP (quotient, /, mx_inline_div) |
237 | 193 |
194 // Unary MArray ops. | |
195 | |
196 template <class T> | |
197 MArray<T> | |
3574 | 198 operator + (const MArray<T>& a) |
199 { | |
200 return a; | |
201 } | |
202 | |
203 template <class T> | |
204 MArray<T> | |
237 | 205 operator - (const MArray<T>& a) |
206 { | |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9557
diff
changeset
|
207 return do_mx_unary_op<MArray<T>, MArray<T> > (a, mx_inline_uminus); |
237 | 208 } |
209 | |
210 /* | |
211 ;;; Local Variables: *** | |
212 ;;; mode: C++ *** | |
213 ;;; End: *** | |
214 */ |