Mercurial > octave-nkf
comparison libinterp/corefcn/dot.cc @ 20588:4bed806ee3d4
eliminate more simple uses of error_state
* daspk.cc, dassl.cc, dot.cc, luinc.cc, sylvester.cc, variables.cc,
__eigs__.cc: Eliminate simple uses of error_state.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 05 Oct 2015 20:21:55 -0400 |
parents | b2100e1659ac |
children |
comparison
equal
deleted
inserted
replaced
20587:f90c8372b7ba | 20588:4bed806ee3d4 |
---|---|
145 // Change to column vectors. | 145 // Change to column vectors. |
146 dimx = dimx.redim (1); | 146 dimx = dimx.redim (1); |
147 argx = argx.reshape (dimx); | 147 argx = argx.reshape (dimx); |
148 dimy = dimy.redim (1); | 148 dimy = dimy.redim (1); |
149 argy = argy.reshape (dimy); | 149 argy = argy.reshape (dimy); |
150 match = ! error_state && (dimx == dimy); | 150 match = dimx == dimy; |
151 } | 151 } |
152 | 152 |
153 if (match) | 153 if (match) |
154 { | 154 { |
155 int dim; | 155 int dim; |
156 if (nargin == 2) | 156 if (nargin == 2) |
157 dim = dimx.first_non_singleton (); | 157 dim = dimx.first_non_singleton (); |
158 else | 158 else |
159 dim = args(2).int_value (true) - 1; | 159 dim = args(2).int_value (true) - 1; |
160 | 160 |
161 if (error_state) | 161 if (dim < 0) |
162 ; | |
163 else if (dim < 0) | |
164 error ("dot: DIM must be a valid dimension"); | 162 error ("dot: DIM must be a valid dimension"); |
165 else | 163 else |
166 { | 164 { |
167 octave_idx_type m, n, k; | 165 octave_idx_type m, n, k; |
168 dim_vector dimz; | 166 dim_vector dimz; |
172 { | 170 { |
173 FloatComplexNDArray x = argx.float_complex_array_value (); | 171 FloatComplexNDArray x = argx.float_complex_array_value (); |
174 FloatComplexNDArray y = argy.float_complex_array_value (); | 172 FloatComplexNDArray y = argy.float_complex_array_value (); |
175 get_red_dims (dimx, dimy, dim, dimz, m, n, k); | 173 get_red_dims (dimx, dimy, dim, dimz, m, n, k); |
176 FloatComplexNDArray z (dimz); | 174 FloatComplexNDArray z (dimz); |
177 if (! error_state) | 175 |
178 F77_XFCN (cdotc3, CDOTC3, (m, n, k, | 176 F77_XFCN (cdotc3, CDOTC3, (m, n, k, |
179 x.data (), y.data (), | 177 x.data (), y.data (), |
180 z.fortran_vec ())); | 178 z.fortran_vec ())); |
181 retval = z; | 179 retval = z; |
182 } | 180 } |
183 else | 181 else |
184 { | 182 { |
185 ComplexNDArray x = argx.complex_array_value (); | 183 ComplexNDArray x = argx.complex_array_value (); |
186 ComplexNDArray y = argy.complex_array_value (); | 184 ComplexNDArray y = argy.complex_array_value (); |
187 get_red_dims (dimx, dimy, dim, dimz, m, n, k); | 185 get_red_dims (dimx, dimy, dim, dimz, m, n, k); |
188 ComplexNDArray z (dimz); | 186 ComplexNDArray z (dimz); |
189 if (! error_state) | 187 |
190 F77_XFCN (zdotc3, ZDOTC3, (m, n, k, | 188 F77_XFCN (zdotc3, ZDOTC3, (m, n, k, |
191 x.data (), y.data (), | 189 x.data (), y.data (), |
192 z.fortran_vec ())); | 190 z.fortran_vec ())); |
193 retval = z; | 191 retval = z; |
194 } | 192 } |
195 } | 193 } |
196 else if (argx.is_float_type () && argy.is_float_type ()) | 194 else if (argx.is_float_type () && argy.is_float_type ()) |
197 { | 195 { |
199 { | 197 { |
200 FloatNDArray x = argx.float_array_value (); | 198 FloatNDArray x = argx.float_array_value (); |
201 FloatNDArray y = argy.float_array_value (); | 199 FloatNDArray y = argy.float_array_value (); |
202 get_red_dims (dimx, dimy, dim, dimz, m, n, k); | 200 get_red_dims (dimx, dimy, dim, dimz, m, n, k); |
203 FloatNDArray z (dimz); | 201 FloatNDArray z (dimz); |
204 if (! error_state) | 202 |
205 F77_XFCN (sdot3, SDOT3, (m, n, k, x.data (), y.data (), | 203 F77_XFCN (sdot3, SDOT3, (m, n, k, x.data (), y.data (), |
206 z.fortran_vec ())); | 204 z.fortran_vec ())); |
207 retval = z; | 205 retval = z; |
208 } | 206 } |
209 else | 207 else |
210 { | 208 { |
211 NDArray x = argx.array_value (); | 209 NDArray x = argx.array_value (); |
212 NDArray y = argy.array_value (); | 210 NDArray y = argy.array_value (); |
213 get_red_dims (dimx, dimy, dim, dimz, m, n, k); | 211 get_red_dims (dimx, dimy, dim, dimz, m, n, k); |
214 NDArray z (dimz); | 212 NDArray z (dimz); |
215 if (! error_state) | 213 |
216 F77_XFCN (ddot3, DDOT3, (m, n, k, x.data (), y.data (), | 214 F77_XFCN (ddot3, DDOT3, (m, n, k, x.data (), y.data (), |
217 z.fortran_vec ())); | 215 z.fortran_vec ())); |
218 retval = z; | 216 retval = z; |
219 } | 217 } |
220 } | 218 } |
221 else | 219 else |
222 { | 220 { |
223 // Non-optimized evaluation. | 221 // Non-optimized evaluation. |
224 octave_value_list tmp; | 222 octave_value_list tmp; |
225 tmp(1) = dim + 1; | 223 tmp(1) = dim + 1; |
226 tmp(0) = do_binary_op (octave_value::op_el_mul, argx, argy); | 224 tmp(0) = do_binary_op (octave_value::op_el_mul, argx, argy); |
227 if (! error_state) | 225 |
228 { | 226 tmp = feval ("sum", tmp, 1); |
229 tmp = feval ("sum", tmp, 1); | 227 if (! tmp.empty ()) |
230 if (! tmp.empty ()) | 228 retval = tmp(0); |
231 retval = tmp(0); | |
232 } | |
233 } | 229 } |
234 } | 230 } |
235 } | 231 } |
236 else | 232 else |
237 error ("dot: sizes of X and Y must match"); | 233 error ("dot: sizes of X and Y must match"); |
339 if (argx.is_single_type () || argy.is_single_type ()) | 335 if (argx.is_single_type () || argy.is_single_type ()) |
340 { | 336 { |
341 FloatComplexNDArray x = argx.float_complex_array_value (); | 337 FloatComplexNDArray x = argx.float_complex_array_value (); |
342 FloatComplexNDArray y = argy.float_complex_array_value (); | 338 FloatComplexNDArray y = argy.float_complex_array_value (); |
343 FloatComplexNDArray z (dimz); | 339 FloatComplexNDArray z (dimz); |
344 if (! error_state) | 340 |
345 F77_XFCN (cmatm3, CMATM3, (m, n, k, np, | 341 F77_XFCN (cmatm3, CMATM3, (m, n, k, np, |
346 x.data (), y.data (), | 342 x.data (), y.data (), |
347 z.fortran_vec ())); | 343 z.fortran_vec ())); |
348 retval = z; | 344 retval = z; |
349 } | 345 } |
350 else | 346 else |
351 { | 347 { |
352 ComplexNDArray x = argx.complex_array_value (); | 348 ComplexNDArray x = argx.complex_array_value (); |
353 ComplexNDArray y = argy.complex_array_value (); | 349 ComplexNDArray y = argy.complex_array_value (); |
354 ComplexNDArray z (dimz); | 350 ComplexNDArray z (dimz); |
355 if (! error_state) | 351 |
356 F77_XFCN (zmatm3, ZMATM3, (m, n, k, np, | 352 F77_XFCN (zmatm3, ZMATM3, (m, n, k, np, |
357 x.data (), y.data (), | 353 x.data (), y.data (), |
358 z.fortran_vec ())); | 354 z.fortran_vec ())); |
359 retval = z; | 355 retval = z; |
360 } | 356 } |
361 } | 357 } |
362 else | 358 else |
363 { | 359 { |
364 if (argx.is_single_type () || argy.is_single_type ()) | 360 if (argx.is_single_type () || argy.is_single_type ()) |
365 { | 361 { |
366 FloatNDArray x = argx.float_array_value (); | 362 FloatNDArray x = argx.float_array_value (); |
367 FloatNDArray y = argy.float_array_value (); | 363 FloatNDArray y = argy.float_array_value (); |
368 FloatNDArray z (dimz); | 364 FloatNDArray z (dimz); |
369 if (! error_state) | 365 |
370 F77_XFCN (smatm3, SMATM3, (m, n, k, np, | 366 F77_XFCN (smatm3, SMATM3, (m, n, k, np, |
371 x.data (), y.data (), | 367 x.data (), y.data (), |
372 z.fortran_vec ())); | 368 z.fortran_vec ())); |
373 retval = z; | 369 retval = z; |
374 } | 370 } |
375 else | 371 else |
376 { | 372 { |
377 NDArray x = argx.array_value (); | 373 NDArray x = argx.array_value (); |
378 NDArray y = argy.array_value (); | 374 NDArray y = argy.array_value (); |
379 NDArray z (dimz); | 375 NDArray z (dimz); |
380 if (! error_state) | 376 |
381 F77_XFCN (dmatm3, DMATM3, (m, n, k, np, | 377 F77_XFCN (dmatm3, DMATM3, (m, n, k, np, |
382 x.data (), y.data (), | 378 x.data (), y.data (), |
383 z.fortran_vec ())); | 379 z.fortran_vec ())); |
384 retval = z; | 380 retval = z; |
385 } | 381 } |
386 } | 382 } |
387 } | 383 } |
388 else | 384 else |