diff liboctave/idx-vector.cc @ 10042:b7915ebe8acf

implement index reduction rule for multiple constant ranges
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 30 Dec 2009 05:30:54 +0100
parents 83bd7f34f9da
children b51848e95e4b
line wrap: on
line diff
--- a/liboctave/idx-vector.cc	Tue Dec 29 21:46:37 2009 +0100
+++ b/liboctave/idx-vector.cc	Wed Dec 30 05:30:54 2009 +0100
@@ -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<idx_range_rep *> (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<idx_range_rep *> (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;