comparison liboctave/Array.cc @ 5940:0dd8428bb260

[project @ 2006-08-18 17:50:23 by jwe]
author jwe
date Fri, 18 Aug 2006 17:50:23 +0000
parents 55404f3b0da1
children 4289ed95dde8
comparison
equal deleted inserted replaced
5939:2e86e3601e0f 5940:0dd8428bb260
513 } 513 }
514 } 514 }
515 515
516 retval.resize (dv_new); 516 retval.resize (dv_new);
517 517
518 Array<octave_idx_type> cp (nd+1, 1); 518 if (numel () > 0)
519 for (octave_idx_type i = 1; i < nd+1; i++) 519 {
520 cp(i) = cp(i-1) * dv(i-1); 520 Array<octave_idx_type> cp (nd+1, 1);
521 521 for (octave_idx_type i = 1; i < nd+1; i++)
522 octave_idx_type incr = cp(perm_vec(0)); 522 cp(i) = cp(i-1) * dv(i-1);
523 523
524 Array<octave_idx_type> base_delta (nd-1, 0); 524 octave_idx_type incr = cp(perm_vec(0));
525 Array<octave_idx_type> base_delta_max (nd-1); 525
526 Array<octave_idx_type> base_incr (nd-1); 526 Array<octave_idx_type> base_delta (nd-1, 0);
527 for (octave_idx_type i = 0; i < nd-1; i++) 527 Array<octave_idx_type> base_delta_max (nd-1);
528 { 528 Array<octave_idx_type> base_incr (nd-1);
529 base_delta_max(i) = dv_new(i+1); 529 for (octave_idx_type i = 0; i < nd-1; i++)
530 base_incr(i) = cp(perm_vec(i+1)); 530 {
531 } 531 base_delta_max(i) = dv_new(i+1);
532 532 base_incr(i) = cp(perm_vec(i+1));
533 octave_idx_type nr_new = dv_new(0); 533 }
534 octave_idx_type nel_new = dv_new.numel (); 534
535 octave_idx_type n = nel_new / nr_new; 535 octave_idx_type nr_new = dv_new(0);
536 536 octave_idx_type nel_new = dv_new.numel ();
537 octave_idx_type k = 0; 537 octave_idx_type n = nel_new / nr_new;
538 538
539 for (octave_idx_type i = 0; i < n; i++) 539 octave_idx_type k = 0;
540 { 540
541 octave_idx_type iidx = 0; 541 for (octave_idx_type i = 0; i < n; i++)
542 for (octave_idx_type kk = 0; kk < nd-1; kk++) 542 {
543 iidx += base_delta(kk) * base_incr(kk); 543 octave_idx_type iidx = 0;
544 544 for (octave_idx_type kk = 0; kk < nd-1; kk++)
545 for (octave_idx_type j = 0; j < nr_new; j++) 545 iidx += base_delta(kk) * base_incr(kk);
546 { 546
547 OCTAVE_QUIT; 547 for (octave_idx_type j = 0; j < nr_new; j++)
548 548 {
549 retval(k++) = elem(iidx); 549 OCTAVE_QUIT;
550 iidx += incr; 550
551 } 551 retval(k++) = elem(iidx);
552 552 iidx += incr;
553 base_delta(0)++; 553 }
554 554
555 for (octave_idx_type kk = 0; kk < nd-2; kk++) 555 base_delta(0)++;
556 { 556
557 if (base_delta(kk) == base_delta_max(kk)) 557 for (octave_idx_type kk = 0; kk < nd-2; kk++)
558 { 558 {
559 base_delta(kk) = 0; 559 if (base_delta(kk) == base_delta_max(kk))
560 base_delta(kk+1)++; 560 {
561 base_delta(kk) = 0;
562 base_delta(kk+1)++;
563 }
561 } 564 }
562 } 565 }
563 } 566 }
564 567
565 retval.chop_trailing_singletons (); 568 retval.chop_trailing_singletons ();