Mercurial > octave-nkf
comparison libinterp/corefcn/bitfcns.cc @ 20591:0650b8431037
eliminate more simple uses of error_state
* besselj.cc, bitfcns.cc, utils.cc, chol.cc, ov-java.cc:
Eliminate simple uses of error_state.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 05 Oct 2015 21:37:03 -0400 |
parents | 4bb41929286b |
children |
comparison
equal
deleted
inserted
replaced
20590:1a0a433c8263 | 20591:0650b8431037 |
---|---|
180 { | 180 { |
181 if (arg0_is_bool && arg1_is_bool) | 181 if (arg0_is_bool && arg1_is_bool) |
182 { | 182 { |
183 boolNDArray x (args(0).bool_array_value ()); | 183 boolNDArray x (args(0).bool_array_value ()); |
184 boolNDArray y (args(1).bool_array_value ()); | 184 boolNDArray y (args(1).bool_array_value ()); |
185 if (! error_state) | 185 |
186 retval = bitopx (fname, x, y).bool_array_value (); | 186 retval = bitopx (fname, x, y).bool_array_value (); |
187 } | 187 } |
188 else if (arg0_is_float && arg1_is_float) | 188 else if (arg0_is_float && arg1_is_float) |
189 { | 189 { |
190 uint64NDArray x (args(0).float_array_value ()); | 190 uint64NDArray x (args(0).float_array_value ()); |
191 uint64NDArray y (args(1).float_array_value ()); | 191 uint64NDArray y (args(1).float_array_value ()); |
192 if (! error_state) | 192 |
193 retval = bitopx (fname, x, y).float_array_value (); | 193 retval = bitopx (fname, x, y).float_array_value (); |
194 } | 194 } |
195 else if (! (arg0_is_float || arg1_is_float)) | 195 else if (! (arg0_is_float || arg1_is_float)) |
196 { | 196 { |
197 uint64NDArray x (args(0).array_value ()); | 197 uint64NDArray x (args(0).array_value ()); |
198 uint64NDArray y (args(1).array_value ()); | 198 uint64NDArray y (args(1).array_value ()); |
199 if (! error_state) | 199 |
200 retval = bitopx (fname, x, y).array_value (); | 200 retval = bitopx (fname, x, y).array_value (); |
201 } | 201 } |
202 else | 202 else |
203 { | 203 { |
204 int p = (arg0_is_float ? 1 : 0); | 204 int p = (arg0_is_float ? 1 : 0); |
205 int q = (arg0_is_float ? 0 : 1); | 205 int q = (arg0_is_float ? 0 : 1); |
206 | 206 |
207 uint64NDArray x (args(p).array_value ()); | 207 uint64NDArray x (args(p).array_value ()); |
208 uint64NDArray y (args(q).float_array_value ()); | 208 uint64NDArray y (args(q).float_array_value ()); |
209 if (! error_state) | 209 |
210 retval = bitopx (fname, x, y).float_array_value (); | 210 retval = bitopx (fname, x, y).float_array_value (); |
211 } | 211 } |
212 } | 212 } |
213 else | 213 else |
214 { | 214 { |
215 int p = (arg0_is_int ? 1 : 0); | 215 int p = (arg0_is_int ? 1 : 0); |
220 if (args(q).type_id () == octave_uint64_matrix::static_type_id () | 220 if (args(q).type_id () == octave_uint64_matrix::static_type_id () |
221 || args(q).type_id () == octave_uint64_scalar::static_type_id ()) | 221 || args(q).type_id () == octave_uint64_scalar::static_type_id ()) |
222 { | 222 { |
223 uint64NDArray x (dx); | 223 uint64NDArray x (dx); |
224 uint64NDArray y = args(q).uint64_array_value (); | 224 uint64NDArray y = args(q).uint64_array_value (); |
225 if (! error_state) | 225 |
226 retval = bitopx (fname, x, y); | 226 retval = bitopx (fname, x, y); |
227 } | 227 } |
228 else if (args(q).type_id () == octave_uint32_matrix::static_type_id () | 228 else if (args(q).type_id () == octave_uint32_matrix::static_type_id () |
229 || args(q).type_id () == octave_uint32_scalar::static_type_id ()) | 229 || args(q).type_id () == octave_uint32_scalar::static_type_id ()) |
230 { | 230 { |
231 uint32NDArray x (dx); | 231 uint32NDArray x (dx); |
232 uint32NDArray y = args(q).uint32_array_value (); | 232 uint32NDArray y = args(q).uint32_array_value (); |
233 if (! error_state) | 233 |
234 retval = bitopx (fname, x, y); | 234 retval = bitopx (fname, x, y); |
235 } | 235 } |
236 else if (args(q).type_id () == octave_uint16_matrix::static_type_id () | 236 else if (args(q).type_id () == octave_uint16_matrix::static_type_id () |
237 || args(q).type_id () == octave_uint16_scalar::static_type_id ()) | 237 || args(q).type_id () == octave_uint16_scalar::static_type_id ()) |
238 { | 238 { |
239 uint16NDArray x (dx); | 239 uint16NDArray x (dx); |
240 uint16NDArray y = args(q).uint16_array_value (); | 240 uint16NDArray y = args(q).uint16_array_value (); |
241 if (! error_state) | 241 |
242 retval = bitopx (fname, x, y); | 242 retval = bitopx (fname, x, y); |
243 } | 243 } |
244 else if (args(q).type_id () == octave_uint8_matrix::static_type_id () | 244 else if (args(q).type_id () == octave_uint8_matrix::static_type_id () |
245 || args(q).type_id () == octave_uint8_scalar::static_type_id ()) | 245 || args(q).type_id () == octave_uint8_scalar::static_type_id ()) |
246 { | 246 { |
247 uint8NDArray x (dx); | 247 uint8NDArray x (dx); |
248 uint8NDArray y = args(q).uint8_array_value (); | 248 uint8NDArray y = args(q).uint8_array_value (); |
249 if (! error_state) | 249 |
250 retval = bitopx (fname, x, y); | 250 retval = bitopx (fname, x, y); |
251 } | 251 } |
252 else if (args(q).type_id () == octave_int64_matrix::static_type_id () | 252 else if (args(q).type_id () == octave_int64_matrix::static_type_id () |
253 || args(q).type_id () == octave_int64_scalar::static_type_id ()) | 253 || args(q).type_id () == octave_int64_scalar::static_type_id ()) |
254 { | 254 { |
255 int64NDArray x (dx); | 255 int64NDArray x (dx); |
256 int64NDArray y = args(q).int64_array_value (); | 256 int64NDArray y = args(q).int64_array_value (); |
257 if (! error_state) | 257 |
258 retval = bitopx (fname, x, y); | 258 retval = bitopx (fname, x, y); |
259 } | 259 } |
260 else if (args(q).type_id () == octave_int32_matrix::static_type_id () | 260 else if (args(q).type_id () == octave_int32_matrix::static_type_id () |
261 || args(q).type_id () == octave_int32_scalar::static_type_id ()) | 261 || args(q).type_id () == octave_int32_scalar::static_type_id ()) |
262 { | 262 { |
263 int32NDArray x (dx); | 263 int32NDArray x (dx); |
264 int32NDArray y = args(q).int32_array_value (); | 264 int32NDArray y = args(q).int32_array_value (); |
265 if (! error_state) | 265 |
266 retval = bitopx (fname, x, y); | 266 retval = bitopx (fname, x, y); |
267 } | 267 } |
268 else if (args(q).type_id () == octave_int16_matrix::static_type_id () | 268 else if (args(q).type_id () == octave_int16_matrix::static_type_id () |
269 || args(q).type_id () == octave_int16_scalar::static_type_id ()) | 269 || args(q).type_id () == octave_int16_scalar::static_type_id ()) |
270 { | 270 { |
271 int16NDArray x (dx); | 271 int16NDArray x (dx); |
272 int16NDArray y = args(q).int16_array_value (); | 272 int16NDArray y = args(q).int16_array_value (); |
273 if (! error_state) | 273 |
274 retval = bitopx (fname, x, y); | 274 retval = bitopx (fname, x, y); |
275 } | 275 } |
276 else if (args(q).type_id () == octave_int8_matrix::static_type_id () | 276 else if (args(q).type_id () == octave_int8_matrix::static_type_id () |
277 || args(q).type_id () == octave_int8_scalar::static_type_id ()) | 277 || args(q).type_id () == octave_int8_scalar::static_type_id ()) |
278 { | 278 { |
279 int8NDArray x (dx); | 279 int8NDArray x (dx); |
280 int8NDArray y = args(q).int8_array_value (); | 280 int8NDArray y = args(q).int8_array_value (); |
281 if (! error_state) | 281 |
282 retval = bitopx (fname, x, y); | 282 retval = bitopx (fname, x, y); |
283 } | 283 } |
284 else | 284 else |
285 error ("%s: invalid operand type", fname.c_str ()); | 285 error ("%s: invalid operand type", fname.c_str ()); |
286 } | 286 } |
287 } | 287 } |
290 if (args(0).type_id () == octave_uint64_matrix::static_type_id () | 290 if (args(0).type_id () == octave_uint64_matrix::static_type_id () |
291 || args(0).type_id () == octave_uint64_scalar::static_type_id ()) | 291 || args(0).type_id () == octave_uint64_scalar::static_type_id ()) |
292 { | 292 { |
293 uint64NDArray x = args(0).uint64_array_value (); | 293 uint64NDArray x = args(0).uint64_array_value (); |
294 uint64NDArray y = args(1).uint64_array_value (); | 294 uint64NDArray y = args(1).uint64_array_value (); |
295 if (! error_state) | 295 |
296 retval = bitopx (fname, x, y); | 296 retval = bitopx (fname, x, y); |
297 } | 297 } |
298 else if (args(0).type_id () == octave_uint32_matrix::static_type_id () | 298 else if (args(0).type_id () == octave_uint32_matrix::static_type_id () |
299 || args(0).type_id () == octave_uint32_scalar::static_type_id ()) | 299 || args(0).type_id () == octave_uint32_scalar::static_type_id ()) |
300 { | 300 { |
301 uint32NDArray x = args(0).uint32_array_value (); | 301 uint32NDArray x = args(0).uint32_array_value (); |
302 uint32NDArray y = args(1).uint32_array_value (); | 302 uint32NDArray y = args(1).uint32_array_value (); |
303 if (! error_state) | 303 |
304 retval = bitopx (fname, x, y); | 304 retval = bitopx (fname, x, y); |
305 } | 305 } |
306 else if (args(0).type_id () == octave_uint16_matrix::static_type_id () | 306 else if (args(0).type_id () == octave_uint16_matrix::static_type_id () |
307 || args(0).type_id () == octave_uint16_scalar::static_type_id ()) | 307 || args(0).type_id () == octave_uint16_scalar::static_type_id ()) |
308 { | 308 { |
309 uint16NDArray x = args(0).uint16_array_value (); | 309 uint16NDArray x = args(0).uint16_array_value (); |
310 uint16NDArray y = args(1).uint16_array_value (); | 310 uint16NDArray y = args(1).uint16_array_value (); |
311 if (! error_state) | 311 |
312 retval = bitopx (fname, x, y); | 312 retval = bitopx (fname, x, y); |
313 } | 313 } |
314 else if (args(0).type_id () == octave_uint8_matrix::static_type_id () | 314 else if (args(0).type_id () == octave_uint8_matrix::static_type_id () |
315 || args(0).type_id () == octave_uint8_scalar::static_type_id ()) | 315 || args(0).type_id () == octave_uint8_scalar::static_type_id ()) |
316 { | 316 { |
317 uint8NDArray x = args(0).uint8_array_value (); | 317 uint8NDArray x = args(0).uint8_array_value (); |
318 uint8NDArray y = args(1).uint8_array_value (); | 318 uint8NDArray y = args(1).uint8_array_value (); |
319 if (! error_state) | 319 |
320 retval = bitopx (fname, x, y); | 320 retval = bitopx (fname, x, y); |
321 } | 321 } |
322 else if (args(0).type_id () == octave_int64_matrix::static_type_id () | 322 else if (args(0).type_id () == octave_int64_matrix::static_type_id () |
323 || args(0).type_id () == octave_int64_scalar::static_type_id ()) | 323 || args(0).type_id () == octave_int64_scalar::static_type_id ()) |
324 { | 324 { |
325 int64NDArray x = args(0).int64_array_value (); | 325 int64NDArray x = args(0).int64_array_value (); |
326 int64NDArray y = args(1).int64_array_value (); | 326 int64NDArray y = args(1).int64_array_value (); |
327 if (! error_state) | 327 |
328 retval = bitopx (fname, x, y); | 328 retval = bitopx (fname, x, y); |
329 } | 329 } |
330 else if (args(0).type_id () == octave_int32_matrix::static_type_id () | 330 else if (args(0).type_id () == octave_int32_matrix::static_type_id () |
331 || args(0).type_id () == octave_int32_scalar::static_type_id ()) | 331 || args(0).type_id () == octave_int32_scalar::static_type_id ()) |
332 { | 332 { |
333 int32NDArray x = args(0).int32_array_value (); | 333 int32NDArray x = args(0).int32_array_value (); |
334 int32NDArray y = args(1).int32_array_value (); | 334 int32NDArray y = args(1).int32_array_value (); |
335 if (! error_state) | 335 |
336 retval = bitopx (fname, x, y); | 336 retval = bitopx (fname, x, y); |
337 } | 337 } |
338 else if (args(0).type_id () == octave_int16_matrix::static_type_id () | 338 else if (args(0).type_id () == octave_int16_matrix::static_type_id () |
339 || args(0).type_id () == octave_int16_scalar::static_type_id ()) | 339 || args(0).type_id () == octave_int16_scalar::static_type_id ()) |
340 { | 340 { |
341 int16NDArray x = args(0).int16_array_value (); | 341 int16NDArray x = args(0).int16_array_value (); |
342 int16NDArray y = args(1).int16_array_value (); | 342 int16NDArray y = args(1).int16_array_value (); |
343 if (! error_state) | 343 |
344 retval = bitopx (fname, x, y); | 344 retval = bitopx (fname, x, y); |
345 } | 345 } |
346 else if (args(0).type_id () == octave_int8_matrix::static_type_id () | 346 else if (args(0).type_id () == octave_int8_matrix::static_type_id () |
347 || args(0).type_id () == octave_int8_scalar::static_type_id ()) | 347 || args(0).type_id () == octave_int8_scalar::static_type_id ()) |
348 { | 348 { |
349 int8NDArray x = args(0).int8_array_value (); | 349 int8NDArray x = args(0).int8_array_value (); |
350 int8NDArray y = args(1).int8_array_value (); | 350 int8NDArray y = args(1).int8_array_value (); |
351 if (! error_state) | 351 |
352 retval = bitopx (fname, x, y); | 352 retval = bitopx (fname, x, y); |
353 } | 353 } |
354 else | 354 else |
355 error ("%s: invalid operand type", fname.c_str ()); | 355 error ("%s: invalid operand type", fname.c_str ()); |
356 } | 356 } |
357 else | 357 else |
458 // Note that the bitshift operators are undefined if shifted by more | 458 // Note that the bitshift operators are undefined if shifted by more |
459 // bits than in the type, so we need to test for the size of the | 459 // bits than in the type, so we need to test for the size of the |
460 // shift. | 460 // shift. |
461 | 461 |
462 #define DO_BITSHIFT(T) \ | 462 #define DO_BITSHIFT(T) \ |
463 if (! error_state) \ | 463 double d1, d2; \ |
464 \ | |
465 if (n.all_integers (d1, d2)) \ | |
464 { \ | 466 { \ |
465 double d1, d2; \ | 467 int m_nel = m.numel (); \ |
468 int n_nel = n.numel (); \ | |
466 \ | 469 \ |
467 if (n.all_integers (d1, d2)) \ | 470 bool is_scalar_op = (m_nel == 1 || n_nel == 1); \ |
471 \ | |
472 dim_vector m_dv = m.dims (); \ | |
473 dim_vector n_dv = n.dims (); \ | |
474 \ | |
475 bool is_array_op = (m_dv == n_dv); \ | |
476 \ | |
477 if (is_array_op || is_scalar_op) \ | |
468 { \ | 478 { \ |
469 int m_nel = m.numel (); \ | 479 T ## NDArray result; \ |
470 int n_nel = n.numel (); \ | |
471 \ | 480 \ |
472 bool is_scalar_op = (m_nel == 1 || n_nel == 1); \ | 481 if (m_nel != 1) \ |
482 result.resize (m_dv); \ | |
483 else \ | |
484 result.resize (n_dv); \ | |
473 \ | 485 \ |
474 dim_vector m_dv = m.dims (); \ | 486 for (int i = 0; i < m_nel; i++) \ |
475 dim_vector n_dv = n.dims (); \ | 487 if (is_scalar_op) \ |
488 for (int k = 0; k < n_nel; k++) \ | |
489 if (static_cast<int> (n(k)) >= bits_in_type) \ | |
490 result(i+k) = 0; \ | |
491 else \ | |
492 result(i+k) = bitshift (m(i), static_cast<int> (n(k)), mask); \ | |
493 else \ | |
494 if (static_cast<int> (n(i)) >= bits_in_type) \ | |
495 result(i) = 0; \ | |
496 else \ | |
497 result(i) = bitshift (m(i), static_cast<int> (n(i)), mask); \ | |
476 \ | 498 \ |
477 bool is_array_op = (m_dv == n_dv); \ | 499 retval = result; \ |
478 \ | |
479 if (is_array_op || is_scalar_op) \ | |
480 { \ | |
481 T ## NDArray result; \ | |
482 \ | |
483 if (m_nel != 1) \ | |
484 result.resize (m_dv); \ | |
485 else \ | |
486 result.resize (n_dv); \ | |
487 \ | |
488 for (int i = 0; i < m_nel; i++) \ | |
489 if (is_scalar_op) \ | |
490 for (int k = 0; k < n_nel; k++) \ | |
491 if (static_cast<int> (n(k)) >= bits_in_type) \ | |
492 result(i+k) = 0; \ | |
493 else \ | |
494 result(i+k) = bitshift (m(i), static_cast<int> (n(k)), mask); \ | |
495 else \ | |
496 if (static_cast<int> (n(i)) >= bits_in_type) \ | |
497 result(i) = 0; \ | |
498 else \ | |
499 result(i) = bitshift (m(i), static_cast<int> (n(i)), mask); \ | |
500 \ | |
501 retval = result; \ | |
502 } \ | |
503 else \ | |
504 error ("bitshift: size of A and N must match, or one operand must be a scalar"); \ | |
505 } \ | 500 } \ |
506 else \ | 501 else \ |
507 error ("bitshift: expecting integer as second argument"); \ | 502 error ("bitshift: size of A and N must match, or one operand must be a scalar"); \ |
508 } | 503 } \ |
504 else \ | |
505 error ("bitshift: expecting integer as second argument"); \ | |
509 | 506 |
510 #define DO_UBITSHIFT(T, N) \ | 507 #define DO_UBITSHIFT(T, N) \ |
511 do \ | 508 do \ |
512 { \ | 509 { \ |
513 int bits_in_type = octave_ ## T :: nbits (); \ | 510 int bits_in_type = octave_ ## T :: nbits (); \ |
598 else if (nbits < 0) | 595 else if (nbits < 0) |
599 error ("bitshift: N must be positive"); | 596 error ("bitshift: N must be positive"); |
600 } | 597 } |
601 } | 598 } |
602 } | 599 } |
603 | |
604 if (error_state) | |
605 return retval; | |
606 | 600 |
607 octave_value m_arg = args(0); | 601 octave_value m_arg = args(0); |
608 std::string cname = m_arg.class_name (); | 602 std::string cname = m_arg.class_name (); |
609 | 603 |
610 if (cname == "uint8") | 604 if (cname == "uint8") |