# HG changeset patch # User Jaroslav Hajek # Date 1236947962 -3600 # Node ID 5fa53d1b6247a4f98377c1181cf6fcefdbfb9b77 # Parent 967a692ddfe249db30f5ec6ff430795dbcfe9a57 more indexing optimizations diff -r 967a692ddfe2 -r 5fa53d1b6247 liboctave/ChangeLog --- a/liboctave/ChangeLog Fri Mar 13 12:18:50 2009 +0100 +++ b/liboctave/ChangeLog Fri Mar 13 13:39:22 2009 +0100 @@ -4,6 +4,9 @@ constructor body. * Range.cc: Move it here. Check for invalid range op results. (all operators): Validate cache for invalid range op results. + * idx-vector.h (idx_vector::index): Optimize zero-step range case. + * idx-vector.cc (idx_vector::maybe_reduce): Always reduce colon in + singleton dimension. 2009-03-10 Jason Riedy diff -r 967a692ddfe2 -r 5fa53d1b6247 liboctave/idx-vector.cc --- a/liboctave/idx-vector.cc Fri Mar 13 12:18:50 2009 +0100 +++ b/liboctave/idx-vector.cc Fri Mar 13 13:39:22 2009 +0100 @@ -416,6 +416,16 @@ return true; } + // Possibly skip singleton dims. + if (n == 1 && rep->is_colon_equiv (n)) + { + *this = j; + return true; + } + + if (nj == 1 && j.is_colon_equiv (nj)) + return true; + switch (j.idx_class ()) { case class_colon: diff -r 967a692ddfe2 -r 5fa53d1b6247 liboctave/idx-vector.h --- a/liboctave/idx-vector.h Fri Mar 13 12:18:50 2009 +0100 +++ b/liboctave/idx-vector.h Fri Mar 13 13:39:22 2009 +0100 @@ -517,6 +517,8 @@ std::copy (ssrc, ssrc + len, dest); else if (step == -1) std::reverse_copy (ssrc - len + 1, ssrc + 1, dest); + else if (step == 0) + std::fill_n (dest, len, *ssrc); else { for (octave_idx_type i = 0, j = 0; i < len; i++, j += step) diff -r 967a692ddfe2 -r 5fa53d1b6247 src/ChangeLog --- a/src/ChangeLog Fri Mar 13 12:18:50 2009 +0100 +++ b/src/ChangeLog Fri Mar 13 13:39:22 2009 +0100 @@ -4,6 +4,8 @@ constructing from invalid range op result. * ov-range.cc (octave_range::try_narrowing_conversion): Validate invalid range op results. + * data.cc (fill_matrix): Return packed form (zero-step range) if + possible. 2009-03-10 Jason Riedy diff -r 967a692ddfe2 -r 5fa53d1b6247 src/data.cc --- a/src/data.cc Fri Mar 13 12:18:50 2009 +0100 +++ b/src/data.cc Fri Mar 13 13:39:22 2009 +0100 @@ -3248,7 +3248,12 @@ break; case oct_data_conv::dt_double: - retval = NDArray (dims, val); + { + if (val == 1 && dims.length () == 2 && dims (0) == 1) + retval = Range (1.0, 0.0, dims (1)); // packed form + else + retval = NDArray (dims, val); + } break; case oct_data_conv::dt_logical: