# HG changeset patch # User jwe # Date 845322531 0 # Node ID 4f55dc039a7eddf14c0766d2fc45084561bde83b # Parent 13b3c87b192eeaa4eabe82719b1aec5450212812 [project @ 1996-10-14 19:48:50 by jwe] diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,7 +1,7 @@ Mon Oct 14 11:05:24 1996 John W. Eaton - * 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. diff --git a/src/op-str-str.cc b/src/op-str-str.cc --- 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); } /* diff --git a/src/ov-cx-mat.cc b/src/ov-cx-mat.cc --- 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; diff --git a/src/ov-re-mat.cc b/src/ov-re-mat.cc --- 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; diff --git a/src/ov-str-mat.cc b/src/ov-str-mat.cc --- 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&, const Array2&); + +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 diff --git a/src/ov-str-mat.h b/src/ov-str-mat.h --- 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; diff --git a/src/pt-fvc.cc b/src/pt-fvc.cc --- 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 (); }