Mercurial > hg > octave-lyh
diff src/ov-base-sparse.cc @ 10512:aac9f4265048
rewrite sparse indexed assignment
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Tue, 13 Apr 2010 12:36:21 +0200 |
parents | fdccd69d26bd |
children | c5005bc2b7a9 |
line wrap: on
line diff
--- a/src/ov-base-sparse.cc +++ b/src/ov-base-sparse.cc @@ -165,12 +165,40 @@ void octave_base_sparse<T>::assign (const octave_value_list& idx, const T& rhs) { + octave_idx_type len = idx.length (); - for (octave_idx_type i = 0; i < len; i++) - matrix.set_index (idx(i).index_vector ()); + switch (len) + { + case 1: + { + idx_vector i = idx (0).index_vector (); + + if (! error_state) + matrix.assign (i, rhs); + + break; + } + + case 2: + { + idx_vector i = idx (0).index_vector (); - ::assign (matrix, rhs); + if (! error_state) + { + idx_vector j = idx (1).index_vector (); + + if (! error_state) + matrix.assign (i, j, rhs); + } + + break; + } + + default: + error ("sparse indexing needs 1 or 2 indices"); + } + // Invalidate matrix type. typ.invalidate_type ();