# HG changeset patch # User jwe # Date 863468255 0 # Node ID 458cea5c8356a3d39b192472aa0fe78034d20a5a # Parent a51926eab51aceb3cfd727451feebe5aba919166 [project @ 1997-05-12 20:17:35 by jwe] diff --git a/liboctave/ChangeLog b/liboctave/ChangeLog --- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,5 +1,8 @@ Mon May 12 02:14:13 1997 John W. Eaton + * idx-vector.cc (IDX_VEC_REP::is_colon_equiv): Make it work when + the vector is not sorted. + * CMatrix.cc (ComplexMatrix::operator !): Return boolMatrix. * dMatrix.cc (Matrix::operator !): Likewise diff --git a/liboctave/idx-vector.cc b/liboctave/idx-vector.cc --- a/liboctave/idx-vector.cc +++ b/liboctave/idx-vector.cc @@ -504,28 +504,39 @@ { colon_equiv = 1; } - else if (len > 0 && len > 1 && ! one_zero) + else if (len > 1 && ! one_zero) { - int *tmp_data = copy_data (data, len); - - int tmp_len = len; - if (sort_uniq) { + int *tmp_data = copy_data (data, len); + sort_data (tmp_data, len); - tmp_len = make_uniq (tmp_data, len); - } + int tmp_len = make_uniq (tmp_data, len); + + colon_equiv = (tmp_len == n + && tmp_data[0] == 0 + && tmp_data[tmp_len-1] == tmp_len - 1); - colon_equiv = ((tmp_len == 0 && n == 0) - || (tmp_len == n - && tmp_data[0] == 0 - && tmp_data[tmp_len-1] == tmp_len - 1)); + delete [] tmp_data; + } + else + { + if (len == n) + { + colon_equiv = 1; - delete [] tmp_data; + for (int ii = 0; ii < n; ii++) + if (data[ii] != ii) + { + colon_equiv = 0; + break; + } + } + } } else - colon_equiv = (len == 1 && n == 1 && data[0] == 0); + colon_equiv = (len == n && (n == 0 || (n == 1 && data[0] == 0))); colon_equiv_checked = 1; }