Mercurial > octave-nkf
diff src/oct-map.cc @ 5880:84ca47e311b3
[project @ 2006-07-06 22:34:48 by jwe]
author | jwe |
---|---|
date | Thu, 06 Jul 2006 22:36:00 +0000 |
parents | faafc2d98b8d |
children | 70b3f8f1a793 |
line wrap: on
line diff
--- a/src/oct-map.cc Wed Jul 05 23:51:24 2006 +0000 +++ b/src/oct-map.cc Thu Jul 06 22:36:00 2006 +0000 @@ -31,9 +31,25 @@ #include "oct-map.h" #include "utils.h" +Octave_map::Octave_map (const dim_vector& dv, + const string_vector& key_list_arg) + : map (), key_list (), dimensions (dv) +{ + Cell c (dv); + + for (octave_idx_type i = 0; i < key_list_arg.length (); i++) + { + std::string k = key_list_arg[i]; + map[k] = c; + key_list.push_back (k); + } +} + Cell& Octave_map::contents (const std::string& k) { + maybe_add_to_key_list (k); + return map[k]; } @@ -75,15 +91,14 @@ string_vector Octave_map::keys (void) const { - octave_idx_type len = length (); - - string_vector names (len); + if (length () != key_list.size ()) + { + std::cerr << "length () = " << length () << std::endl; + std::cerr << "key_list.size () = " << key_list.size () << std::endl; + abort (); + } - octave_idx_type i = 0; - for (const_iterator p = begin (); p != end (); p++) - names[i++] = key (p); - - return names; + return string_vector (key_list); } Octave_map @@ -326,6 +341,8 @@ dimensions = new_dims; + maybe_add_to_key_list (k); + map[k] = tmp; } @@ -337,6 +354,8 @@ { if (empty ()) { + maybe_add_to_key_list (k); + map[k] = Cell (rhs); dimensions = dim_vector (1, 1); @@ -346,7 +365,11 @@ dim_vector dv = dims (); if (dv.all_ones ()) - map[k] = Cell (rhs); + { + maybe_add_to_key_list (k); + + map[k] = Cell (rhs); + } else error ("invalid structure assignment"); } @@ -359,6 +382,8 @@ { if (empty ()) { + maybe_add_to_key_list (k); + map[k] = rhs; dimensions = rhs.dims (); @@ -366,7 +391,11 @@ else { if (dims () == rhs.dims ()) - map[k] = rhs; + { + maybe_add_to_key_list (k); + + map[k] = rhs; + } else error ("invalid structure assignment"); }