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;