# HG changeset patch # User John W. Eaton # Date 1245821449 -7200 # Node ID 4e2138bc11520fc0c0a659a74f5d3ca839b02e3d # Parent d5c5927d7d117e2427bf2aa509dadbcb0b868a77 oct-map.cc: preserve key order diff -r d5c5927d7d11 -r 4e2138bc1152 src/ChangeLog --- a/src/ChangeLog Tue Jun 23 12:57:57 2009 +0200 +++ b/src/ChangeLog Wed Jun 24 07:30:49 2009 +0200 @@ -1,3 +1,9 @@ +2009-06-23 John W. Eaton + + * oct-map.cc (Octave_map::squeeze, Octave_map::permute, + Octave_map::transpose, Octave_map::reshape, Octave_map::resize, + Octave_map::concat): Preserve key order. + 2009-06-22 Jaroslav Hajek * ov-cell.cc (octave_cell::all_strings): Avoid duplicate conversions. diff -r d5c5927d7d11 -r 4e2138bc1152 src/oct-map.cc --- a/src/oct-map.cc Tue Jun 23 12:57:57 2009 +0200 +++ b/src/oct-map.cc Wed Jun 24 07:30:49 2009 +0200 @@ -64,6 +64,9 @@ retval.assign (key (pa), tmp); } + // Preserve order of keys. + retval.key_list = key_list; + return retval; } @@ -82,6 +85,9 @@ retval.assign (key (pa), tmp); } + // Preserve order of keys. + retval.key_list = key_list; + return retval; } @@ -153,6 +159,9 @@ for (const_iterator p = begin (); p != end (); p++) retval.assign (key(p), Cell (contents(p).transpose ())); + // Preserve order of keys. + retval.key_list = key_list; + return retval; } @@ -167,6 +176,9 @@ retval.assign (key(p), contents(p).reshape (new_dims)); retval.dimensions = new_dims; + + // Preserve order of keys. + retval.key_list = key_list; } else retval = *this; @@ -196,6 +208,9 @@ assign (key(p), tmp); } + + // Preserve order of keys. + retval.key_list = key_list; } } } @@ -220,6 +235,9 @@ retval.assign (key(pa), contents(pa).insert (rb.contents(pb), ra_idx)); } + + // Preserve order of keys. + retval.key_list = key_list; } else { @@ -436,10 +454,13 @@ Octave_map::index (const octave_value_list& idx, bool resize_ok) const { Octave_map retval; + octave_idx_type n_idx = idx.length (); + if (n_idx > 0) { Array ra_idx (n_idx); + for (octave_idx_type i = 0; i < n_idx; i++) { ra_idx(i) = idx(i).index_vector (); @@ -451,8 +472,8 @@ { for (const_iterator p = begin (); p != end (); p++) { + Cell tmp = contents (p); - Cell tmp = contents (p); tmp = tmp.ArrayN::index (ra_idx, resize_ok); if (error_state)