changeset 2407:4f55dc039a7e

[project @ 1996-10-14 19:48:50 by jwe]
author jwe
date Mon, 14 Oct 1996 19:48:51 +0000
parents 13b3c87b192e
children e22aae3ccfad
files src/ChangeLog src/op-str-str.cc src/ov-cx-mat.cc src/ov-re-mat.cc src/ov-str-mat.cc src/ov-str-mat.h src/pt-fvc.cc
diffstat 7 files changed, 108 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,7 +1,7 @@
 Mon Oct 14 11:05:24 1996  John W. Eaton  <jwe@bevo.che.wisc.edu>
 
-	* pt-fvc.cc (tree_identifier::eval): If retval is undefined, print
-	error message.
+	* pt-fvc.cc (tree_identifier::eval): If retval is undefined and
+	the object to eval is a constant, print	error message.
 
 	* Makefile (distclean): Remove *.oct too.
 
--- a/src/op-str-str.cc
+++ b/src/op-str-str.cc
@@ -45,10 +45,32 @@
   return octave_value (v1.char_matrix_value () == v2.char_matrix_value ());
 }
 
+static octave_value
+ne (const octave_value& a1, const octave_value& a2)
+{
+  CAST_BINOP_ARGS (const octave_char_matrix_str&,
+		   const octave_char_matrix_str&);
+
+  return octave_value (v1.char_matrix_value () != v2.char_matrix_value ());
+}
+
+static octave_value
+assign (octave_value& a1, const octave_value_list& idx,
+	const octave_value& a2)
+{
+  CAST_BINOP_ARGS (octave_char_matrix_str&, const octave_char_matrix_str&);
+
+  v1.assign (idx, v2.char_matrix_value ());
+  return octave_value ();
+}
+
 void
 install_str_str_ops (void)
 {
   INSTALL_BINOP (eq, octave_char_matrix_str, octave_char_matrix_str, eq);
+  INSTALL_BINOP (ne, octave_char_matrix_str, octave_char_matrix_str, ne);
+
+  INSTALL_ASSIGNOP (octave_char_matrix_str, octave_char_matrix_str, assign);
 }
 
 /*
--- a/src/ov-cx-mat.cc
+++ b/src/ov-cx-mat.cc
@@ -67,6 +67,7 @@
       {
 	idx_vector i = idx (0).index_vector ();
 	idx_vector j = idx (1).index_vector ();
+
 	retval = ComplexMatrix (matrix.index (i, j));
       }
       break;
@@ -74,6 +75,7 @@
     case 1:
       {
 	idx_vector i = idx (0).index_vector ();
+
 	retval = ComplexMatrix (matrix.index (i));
       }
       break;
--- a/src/ov-re-mat.cc
+++ b/src/ov-re-mat.cc
@@ -67,6 +67,7 @@
       {
 	idx_vector i = idx (0).index_vector ();
 	idx_vector j = idx (1).index_vector ();
+
 	retval = Matrix (matrix.index (i, j));
       }
       break;
@@ -74,6 +75,7 @@
     case 1:
       {
 	idx_vector i = idx (0).index_vector ();
+
 	retval = Matrix (matrix.index (i));
       }
       break;
--- a/src/ov-str-mat.cc
+++ b/src/ov-str-mat.cc
@@ -31,6 +31,7 @@
 #include "lo-ieee.h"
 #include "mx-base.h"
 
+#include "oct-obj.h"
 #include "ops.h"
 #include "ov-re-mat.h"
 #include "ov-str-mat.h"
@@ -56,6 +57,79 @@
 }
 
 octave_value
+octave_char_matrix_str::index (const octave_value_list& idx) const
+{
+  octave_value retval;
+
+  int len = idx.length ();
+
+  switch (len)
+    {
+    case 2:
+      {
+	idx_vector i = idx (0).index_vector ();
+	idx_vector j = idx (1).index_vector ();
+
+	retval = octave_value (charMatrix (matrix.index (i, j)), true);
+      }
+      break;
+
+    case 1:
+      {
+	idx_vector i = idx (0).index_vector ();
+
+	retval = octave_value (charMatrix (matrix.index (i)), true);
+      }
+      break;
+
+    default:
+      error ("invalid number of indices (%d) for matrix value", len);
+      break;
+    }
+
+  return retval;
+}
+
+extern void assign (Array2<char>&, const Array2<char>&);
+
+void
+octave_char_matrix_str::assign (const octave_value_list& idx,
+				const charMatrix& rhs)
+{
+  int len = idx.length ();
+
+  switch (len)
+    {
+    case 2:
+      {
+	idx_vector i = idx (0).index_vector ();
+	idx_vector j = idx (1).index_vector ();
+
+	matrix.set_index (i);
+	matrix.set_index (j);
+
+	::assign (matrix, rhs);
+      }
+      break;
+
+    case 1:
+      {
+	idx_vector i = idx (0).index_vector ();
+
+	matrix.set_index (i);
+
+	::assign (matrix, rhs);
+      }
+      break;
+
+    default:
+      error ("invalid number of indices (%d) for indexed matrix assignment",
+	     len);
+      break;
+    }
+}
+
+octave_value
 octave_char_matrix_str::all (void) const
 {
   octave_value retval;
@@ -118,9 +192,7 @@
 charMatrix
 octave_char_matrix_str::all_strings (void) const
 {
-  charMatrix retval;
-  error ("octave_char_matrix_str::all_strings(): not implemented");
-  return retval;
+  return matrix;
 }
 
 string
--- a/src/ov-str-mat.h
+++ b/src/ov-str-mat.h
@@ -84,6 +84,10 @@
 
   numeric_conv_fcn numeric_conversion_function (void) const;
 
+  octave_value index (const octave_value_list& idx) const;
+
+  void assign (const octave_value_list& idx, const charMatrix& rhs);
+
   octave_value all (void) const;
   octave_value any (void) const;
 
--- a/src/pt-fvc.cc
+++ b/src/pt-fvc.cc
@@ -424,7 +424,7 @@
 	  else if (print)
 	    retval.print_with_name (name ());
 	}
-      else
+      else if (object_to_eval->is_constant ())
 	eval_undefined_error ();
     }