# HG changeset patch # User Jaroslav Hajek # Date 1283341258 -7200 # Node ID c07cb4ef80dbdc3404fc393c6ece22fe6827d4d9 # Parent 30063650223533f67963602c0e1b255a4600c048 optimize [a{:}] when a{i} are all scalars diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-09-01 Jaroslav Hajek + + * pt-mat.cc (single_type_concat (Array&, ...)): Optimize all + scalars case. + 2010-09-01 Jaroslav Hajek * oct-map.cc (octave_map::cat): Search first for an index with diff --git a/src/pt-mat.cc b/src/pt-mat.cc --- a/src/pt-mat.cc +++ b/src/pt-mat.cc @@ -690,8 +690,21 @@ { // If possible, forward the operation to liboctave. // Single row. - // FIXME: optimize all scalars case. tm_row_const& row = tmp.front (); + if (! (equal_types::value || equal_types::value) + && row.all_1x1_p ()) + { + // Optimize all scalars case. + result.clear (dv); + assert (result.numel () == row.length ()); + octave_idx_type i = 0; + for (tm_row_const::iterator q = row.begin (); + q != row.end () && ! error_state; q++) + result(i++) = octave_value_extract (*q); + + return; + } + octave_idx_type ncols = row.length (), i = 0; OCTAVE_LOCAL_BUFFER (Array, array_list, ncols);