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");
     }