Mercurial > hg > octave-nkf
diff src/ov-struct.cc @ 10753:bee1b1a2e29a
yield compatible dims from cell2struct + more fixes. build & tests OK
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 25 Jun 2010 09:50:55 +0200 |
parents | 717ba2c3eef1 |
children | 92eb5fb58ebc |
line wrap: on
line diff
--- a/src/ov-struct.cc +++ b/src/ov-struct.cc @@ -1418,7 +1418,7 @@ bool success = true; octave_idx_type len = 0; - if (extract_keyword (is, "length", len, true) && len >= 0) + if (extract_keyword (is, "length", len) && len >= 0) { if (len > 0) { @@ -2043,14 +2043,31 @@ if (! error_state) { - octave_map map; - Array<idx_vector> ia (std::max (dim+1, vals.ndims ()), 1, - idx_vector::colon); + int nd = std::max (dim+1, vals.ndims ()); + // result dimensions. + dim_vector rdv = vals.dims ().redim (nd); + + assert (ext == rdv(dim)); + if (nd == 2) + { + rdv(0) = rdv(1-dim); + rdv(1) = 1; + } + else + { + for (int i = dim + 1; i < nd; i++) + rdv(i-1) = rdv(i); + + rdv.resize (nd-1); + } + + octave_map map (rdv); + Array<idx_vector> ia (nd, 1, idx_vector::colon); for (octave_idx_type i = 0; i < ext; i++) { ia(dim) = i; - map.setfield (fields(i), vals.index (ia)); + map.setfield (fields(i), vals.index (ia).reshape (rdv)); } retval = map;