diff src/ov-str-mat.cc @ 5099:f7e39f977fe8

[project @ 2004-12-24 19:06:01 by jwe]
author jwe
date Fri, 24 Dec 2004 19:06:01 +0000
parents 55f5b61d74b7
children e35b034d3523
line wrap: on
line diff
--- a/src/ov-str-mat.cc
+++ b/src/ov-str-mat.cc
@@ -294,51 +294,55 @@
 bool 
 octave_char_matrix_str::load_ascii (std::istream& is)
 {
-  int mdims = 0;
   bool success = true;
-  std::streampos pos = is.tellg ();
+
+  string_vector keywords(3);
+
+  keywords[0] = "ndims";
+  keywords[1] = "elements";
+  keywords[2] = "length";
+
+  std::string kw;
+  int val = 0;
 
-  if (extract_keyword (is, "ndims", mdims, true))
+  if (extract_keyword (is, keywords, kw, val, true))
     {
-      if (mdims >= 0)
+      if (kw == "ndims")
 	{
-	  dim_vector dv;
-	  dv.resize (mdims);
+	  int mdims = val;
+
+	  if (mdims >= 0)
+	    {
+	      dim_vector dv;
+	      dv.resize (mdims);
 
-	  for (int i = 0; i < mdims; i++)
-	    is >> dv(i);
+	      for (int i = 0; i < mdims; i++)
+		is >> dv(i);
 
-	  charNDArray tmp(dv);
-	  char *ftmp = tmp.fortran_vec ();
+	      charNDArray tmp(dv);
+	      char *ftmp = tmp.fortran_vec ();
+
+	      // Skip the return line
+	      if (! is.read (ftmp, 1))
+		return false;
 
-	  // Skip the return line
-	  if (! is.read (ftmp, 1))
-	    return false;
-
-	  if (! is.read (ftmp, dv.numel ()) || !is)
+	      if (! is.read (ftmp, dv.numel ()) || !is)
+		{
+		  error ("load: failed to load string constant");
+		  success = false;
+		}
+	      else
+		matrix = tmp;
+	    }
+	  else
 	    {
-	      error ("load: failed to load string constant");
+	      error ("load: failed to extract matrix size");
 	      success = false;
 	    }
-	  else
-	    matrix = tmp;
 	}
-      else
+      else if (kw == "elements")
 	{
-	  error ("load: failed to extract matrix size");
-	  success = false;
-	}
-    }
-  else
-    {
-      int elements;
-
-      // re-read the same line again
-      is.clear ();
-      is.seekg (pos);
-
-      if (extract_keyword (is, "elements", elements, true))
-	{
+	  int elements = val;
 
 	  if (elements >= 0)
 	    {
@@ -382,7 +386,6 @@
 	  
 	      if (! error_state)
 		matrix = chm;
-	  
 	    }
 	  else
 	    {
@@ -390,15 +393,11 @@
 	      success = false;
 	    }
 	}
-      else
+      else if (kw == "length")
 	{
-	  // re-read the same line again
-	  is.clear ();
-	  is.seekg (pos);
-
-	  int len;
+	  int len = val;
       
-	  if (extract_keyword (is, "length", len) && len >= 0)
+	  if (len >= 0)
 	    {
 	      // This is cruft for backward compatiability, 
 	      // but relatively harmless.
@@ -420,6 +419,13 @@
 		}
 	    }
 	}
+      else
+	panic_impossible ();
+    }
+  else
+    {
+      error ("load: failed to extract number of rows and columns");
+      success = false;
     }
 
   return success;