Mercurial > hg > octave-nkf
comparison liboctave/mx-inlines.cc @ 4563:742993a501b9
[project @ 2003-10-29 06:25:12 by jwe]
author | jwe |
---|---|
date | Wed, 29 Oct 2003 06:25:12 +0000 |
parents | 802818bfac91 |
children | 01e4957409a4 |
comparison
equal
deleted
inserted
replaced
4562:4699bdb4c362 | 4563:742993a501b9 |
---|---|
348 | 348 |
349 #define MX_ALL_OP(DIM) MX_ANY_ALL_OP (DIM, true, ==, false) | 349 #define MX_ALL_OP(DIM) MX_ANY_ALL_OP (DIM, true, ==, false) |
350 | 350 |
351 #define MX_ANY_OP(DIM) MX_ANY_ALL_OP (DIM, false, !=, true) | 351 #define MX_ANY_OP(DIM) MX_ANY_ALL_OP (DIM, false, !=, true) |
352 | 352 |
353 #define MX_ND_ALL_EXPR elem (iter_idx) == 0 | 353 #define MX_ND_ALL_EXPR elem (iter_idx) == 0 |
354 | 354 |
355 #define MX_ND_ANY_EXPR elem (iter_idx) | 355 #define MX_ND_ANY_EXPR elem (iter_idx) != 0 |
356 | 356 |
357 #define MX_ND_ALL_EVAL(TEST_EXPR) \ | 357 #define MX_ND_ALL_EVAL(TEST_EXPR) \ |
358 if (TEST_EXPR) \ | 358 if (TEST_EXPR) \ |
359 { \ | 359 { \ |
360 if (dim > -1) \ | 360 if (dim > -1) \ |
361 iter_idx (dim) = 0; \ | 361 iter_idx (dim) = 0; \ |
362 retval (iter_idx) = 0; \ | 362 retval (iter_idx) = 0; \ |
363 break; \ | 363 break; \ |
364 } \ | 364 } \ |
365 else \ | 365 else \ |
366 { \ | 366 { \ |
367 if (dim > -1) \ | 367 if (dim > -1) \ |
368 iter_idx (dim) = 0; \ | 368 iter_idx (dim) = 0; \ |
369 retval (iter_idx) = 1; \ | 369 retval (iter_idx) = 1; \ |
370 } \ | 370 } \ |
376 iter_idx (dim) = 0; \ | 376 iter_idx (dim) = 0; \ |
377 retval (iter_idx) = 1; \ | 377 retval (iter_idx) = 1; \ |
378 break; \ | 378 break; \ |
379 } | 379 } |
380 | 380 |
381 #define MX_ND_ALL_ANY(EVAL_EXPR) \ | 381 #define MX_ND_ANY_ALL(EVAL_EXPR, VAL) \ |
382 \ | 382 \ |
383 boolNDArray retval; \ | 383 boolNDArray retval; \ |
384 \ | 384 \ |
385 dim_vector dv = dims (); \ | 385 dim_vector dv = dims (); \ |
386 /* Check to see if we have a empty matrix: [] */ \ | 386 \ |
387 for (int i = 0; i < dv.length (); i++)\ | 387 int empty = true; \ |
388 if (dv (i) == 0) \ | 388 \ |
389 { \ | 389 for (int i = 0; i < dv.length (); i++) \ |
390 dim_vector dv_temp (1, 1); \ | 390 { \ |
391 retval.resize (dv_temp, false); \ | 391 if (dv(i) > 0) \ |
392 return retval; \ | 392 { \ |
393 } \ | 393 empty = false; \ |
394 if (dim == -1)/* We need to find first non-singleton dim */ \ | 394 break; \ |
395 { \ | 395 } \ |
396 /* Be sure to return a scalar if we have a vector */ \ | 396 } \ |
397 if (dv.length () == 2 && dv (0) == 1 && dv (1) >= 1) \ | 397 \ |
398 dim = 1; \ | 398 if (empty) \ |
399 else \ | 399 { \ |
400 for (int i = 0; i < dv.length (); i++) \ | 400 dim_vector retval_dv (1, 1); \ |
401 { \ | 401 retval.resize (retval_dv, VAL); \ |
402 if (dv (i) > 1) \ | 402 return retval; \ |
403 { \ | 403 } \ |
404 dim = i; \ | 404 \ |
405 break; \ | 405 if (dim == -1) /* We need to find first non-singleton dim */ \ |
406 } \ | 406 { \ |
407 } \ | 407 for (int i = 0; i < dv.length (); i++) \ |
408 { \ | |
409 if (dv (i) != 1) \ | |
410 { \ | |
411 dim = i; \ | |
412 break; \ | |
413 } \ | |
414 } \ | |
415 \ | |
408 if (dim == -1) \ | 416 if (dim == -1) \ |
417 dim = 0; \ | |
418 } \ | |
419 \ | |
420 int squeezed = 0; \ | |
421 \ | |
422 for (int i = 0; i < dv.length (); i++) \ | |
423 { \ | |
424 if (dv(i) == 0) \ | |
409 { \ | 425 { \ |
410 (*current_liboctave_error_handler) \ | 426 squeezed = 1;\ |
411 ("all dimensions are singleton"); \ | 427 break;\ |
412 return retval; \ | 428 } \ |
413 } \ | 429 } \ |
414 } \ | 430 \ |
415 /* Length of Dimension */\ | 431 if (squeezed) \ |
432 { \ | |
433 dv(dim) = 1; \ | |
434 \ | |
435 retval.resize (dv, VAL); \ | |
436 \ | |
437 return retval; \ | |
438 } \ | |
439 \ | |
440 /* Length of Dimension */ \ | |
416 int dim_length = 1; \ | 441 int dim_length = 1; \ |
442 \ | |
417 /* dim = -1 means from here that the user specified a */ \ | 443 /* dim = -1 means from here that the user specified a */ \ |
418 /* dimension which is larger that the number of dimensions */ \ | 444 /* dimension which is larger that the number of dimensions */ \ |
419 /* of the array */ \ | 445 /* of the array */ \ |
446 \ | |
420 if (dim >= dv.length ()) \ | 447 if (dim >= dv.length ()) \ |
421 dim = -1; \ | 448 dim = -1; \ |
422 else \ | 449 else \ |
423 dim_length = dv (dim); \ | 450 dim_length = dv(dim); \ |
451 \ | |
424 if (dim > -1) \ | 452 if (dim > -1) \ |
425 dv (dim) = 1; \ | 453 dv(dim) = 1; \ |
426 \ | 454 \ |
427 /* We need to find the number of elements we need to */ \ | 455 /* We need to find the number of elements we need to */ \ |
428 /* fill in retval. First we need to get last idx of */ \ | 456 /* fill in retval. First we need to get last idx of */ \ |
429 /* the dimension vector */ \ | 457 /* the dimension vector */ \ |
458 \ | |
430 Array<int> temp_dv (dv.length (), 0); \ | 459 Array<int> temp_dv (dv.length (), 0); \ |
460 \ | |
431 for (int x = 0; x < dv.length (); x++) \ | 461 for (int x = 0; x < dv.length (); x++) \ |
432 temp_dv (x) = dv (x) - 1; \ | 462 temp_dv(x) = dv(x) - 1; \ |
433 \ | 463 \ |
434 /* This finds the number of elements in retval */ \ | 464 /* This finds the number of elements in retval */ \ |
435 int num_iter = compute_index (temp_dv, dv) + 1; \ | 465 int num_iter = compute_index (temp_dv, dv) + 1; \ |
436 \ | 466 \ |
437 /* Make sure retval has correct dimensions */ \ | 467 /* Make sure retval has correct dimensions */ \ |
438 retval.resize (dv, false); \ | 468 retval.resize (dv, false); \ |
439 \ | 469 \ |
440 Array<int> iter_idx (dv.length (), 0); \ | 470 Array<int> iter_idx (dv.length (), 0); \ |
441 \ | 471 \ |
442 /* Filling in values. */ \ | 472 /* Filling in values. */ \ |
443 /* First loop finds new index */ \ | 473 /* First loop finds new index */ \ |
474 \ | |
444 for (int j = 0; j < num_iter; j++) \ | 475 for (int j = 0; j < num_iter; j++) \ |
445 { \ | 476 { \ |
446 for (int i = 0; i < dim_length; i++) \ | 477 for (int i = 0; i < dim_length; i++) \ |
447 { \ | 478 { \ |
448 if (dim > -1) \ | 479 if (dim > -1) \ |
449 iter_idx (dim) = i; \ | 480 iter_idx(dim) = i; \ |
450 \ | 481 \ |
451 EVAL_EXPR \ | 482 EVAL_EXPR; \ |
452 } \ | 483 } \ |
453 \ | 484 \ |
454 if (dim > -1) \ | 485 if (dim > -1) \ |
455 iter_idx (dim) = 0; \ | 486 iter_idx (dim) = 0; \ |
456 \ | 487 \ |
457 increment_index (iter_idx, dv); \ | 488 increment_index (iter_idx, dv); \ |
458 } \ | 489 } \ |
459 \ | 490 \ |
460 return retval | 491 return retval |
461 | 492 |
462 | 493 |
463 #endif | 494 #endif |
464 | 495 |
465 /* | 496 /* |
466 ;;; Local Variables: *** | 497 ;;; Local Variables: *** |