Mercurial > hg > octave-max
comparison liboctave/Array.cc @ 9678:c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Thu, 01 Oct 2009 14:07:06 +0200 |
parents | 3fc7272937ce |
children | aea3a3a950e1 |
comparison
equal
deleted
inserted
replaced
9677:8cf522ce9c4d | 9678:c929f09457b7 |
---|---|
590 dv.resize (perm_vec_len, 1); | 590 dv.resize (perm_vec_len, 1); |
591 | 591 |
592 // Need this array to check for identical elements in permutation array. | 592 // Need this array to check for identical elements in permutation array. |
593 OCTAVE_LOCAL_BUFFER_INIT (bool, checked, perm_vec_len, false); | 593 OCTAVE_LOCAL_BUFFER_INIT (bool, checked, perm_vec_len, false); |
594 | 594 |
595 bool identity = true; | |
596 | |
595 // Find dimension vector of permuted array. | 597 // Find dimension vector of permuted array. |
596 for (int i = 0; i < perm_vec_len; i++) | 598 for (int i = 0; i < perm_vec_len; i++) |
597 { | 599 { |
598 octave_idx_type perm_elt = perm_vec.elem (i); | 600 octave_idx_type perm_elt = perm_vec.elem (i); |
599 if (perm_elt >= perm_vec_len || perm_elt < 0) | 601 if (perm_elt >= perm_vec_len || perm_elt < 0) |
612 inv ? "ipermute" : "permute"); | 614 inv ? "ipermute" : "permute"); |
613 | 615 |
614 return retval; | 616 return retval; |
615 } | 617 } |
616 else | 618 else |
617 checked[perm_elt] = true; | 619 { |
620 checked[perm_elt] = true; | |
621 identity = identity && perm_elt == i; | |
622 } | |
618 | 623 |
619 dv_new(i) = dv(perm_elt); | 624 dv_new(i) = dv(perm_elt); |
620 } | 625 } |
626 | |
627 if (identity) | |
628 return *this; | |
621 | 629 |
622 if (inv) | 630 if (inv) |
623 { | 631 { |
624 for (int i = 0; i < perm_vec_len; i++) | 632 for (int i = 0; i < perm_vec_len; i++) |
625 perm_vec(perm_vec_arg(i)) = i; | 633 perm_vec(perm_vec_arg(i)) = i; |