# HG changeset patch # User Jaroslav Hajek # Date 1262147454 -3600 # Node ID b7915ebe8acf4525c00c6710e8b12df57986ee84 # Parent 0240c7b34f54fc08bebb814ed99dc191859be3b5 implement index reduction rule for multiple constant ranges diff --git a/liboctave/ChangeLog b/liboctave/ChangeLog --- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,8 @@ +2009-12-30 Jaroslav Hajek + + * idx-vector.cc (idx_vector::maybe_reduce): Implement reduction rule + for subsequent ones () indices. + 2009-12-28 John W. Eaton * file-ops.cc (fle_ops::mkdir_internal, diff --git a/liboctave/idx-vector.cc b/liboctave/idx-vector.cc --- a/liboctave/idx-vector.cc +++ b/liboctave/idx-vector.cc @@ -618,13 +618,14 @@ case class_range: { // (i:k:end,p:q) reduces to a range if i <= k and k divides n. + // (ones (1, m), ones (1, n)) reduces to (ones (1, m*n)) idx_range_rep * r = dynamic_cast (rep); octave_idx_type s = r->get_start (), l = r->length (n); octave_idx_type t = r->get_step (); idx_range_rep * rj = dynamic_cast (j.rep); octave_idx_type sj = rj->get_start (), lj = rj->length (nj); octave_idx_type tj = rj->get_step (); - if (l*t == n && tj == 1) + if ((l*t == n && tj == 1) || (t == 0 && tj == 0)) { *this = new idx_range_rep (s + n * sj, l * lj, t, DIRECT); reduced = true;