# HG changeset patch # User jwe # Date 845491586 0 # Node ID 449f35baba4974036c99c62933529cfb28cdfae3 # Parent 015cbef2b75f29499bb5f3bad4b38bed7dbe1106 [project @ 1996-10-16 18:46:25 by jwe] diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,13 @@ Wed Oct 16 12:00:11 1996 John W. Eaton + * ov.h (octave_value::struct_elt_val): New optional arg, silent. + * ov-base.h, ov-base.cc, ov-struct.h, ov-struct.cc: Likewise, but + for the derived classes the arg is required. + + * data.cc (Fstruct_contains): Require arguments to be struct and + string, respectively. Call octave_value::struct_elt_val with + silent flag set. + * pt-mat.cc (tm_row_const::tm_row_const_rep::eval_error, tm_row_const::tm_row_const_rep::eval_warning): New functions. (tm_row_const::tm_row_const (const tree_matrix_row&): Use them to diff --git a/src/data.cc b/src/data.cc --- a/src/data.cc +++ b/src/data.cc @@ -783,7 +783,8 @@ DEFUN (struct_contains, args, , "struct_contains (S, NAME)\n\ \n\ -return nonzero if S is a structure with element NAME") +Return nonzero if S is a structure with element NAME.\n\ +S must be a structure and NAME must be a string.") { octave_value_list retval; @@ -792,12 +793,15 @@ if (nargin == 2) { retval = 0.0; + if (args(0).is_map () && args(1).is_string ()) { string s = args(1).string_value (); - octave_value tmp = args(0).struct_elt_val (s); + octave_value tmp = args(0).struct_elt_val (s, true); retval = (double) tmp.is_defined (); } + else + print_usage ("struct_contains"); } else print_usage ("struct_contains"); diff --git a/src/ov-base.cc b/src/ov-base.cc --- a/src/ov-base.cc +++ b/src/ov-base.cc @@ -63,7 +63,7 @@ } octave_value -octave_base_value::struct_elt_val (const string&) const +octave_base_value::struct_elt_val (const string&, bool) const { string nm = type_name (); error ("can't perform structure reference operations for %s type", diff --git a/src/ov-base.h b/src/ov-base.h --- a/src/ov-base.h +++ b/src/ov-base.h @@ -77,7 +77,7 @@ idx_vector index_vector (void) const; - octave_value struct_elt_val (const string& nm) const; + octave_value struct_elt_val (const string& nm, bool silent) const; octave_value& struct_elt_ref (const string& nm); diff --git a/src/ov-struct.cc b/src/ov-struct.cc --- a/src/ov-struct.cc +++ b/src/ov-struct.cc @@ -40,7 +40,7 @@ octave_value -octave_struct::struct_elt_val (const string& nm) const +octave_struct::struct_elt_val (const string& nm, bool silent) const { octave_value retval; @@ -48,7 +48,7 @@ if (idx) retval = map.contents (idx); - else + else if (! silent) error ("structure has no member `%s'", nm.c_str ()); return retval; diff --git a/src/ov-struct.h b/src/ov-struct.h --- a/src/ov-struct.h +++ b/src/ov-struct.h @@ -71,7 +71,7 @@ void operator delete (void *p, size_t size); #endif - octave_value struct_elt_val (const string& nm) const; + octave_value struct_elt_val (const string& nm, bool silent) const; octave_value& struct_elt_ref (const string& nm); diff --git a/src/ov.h b/src/ov.h --- a/src/ov.h +++ b/src/ov.h @@ -189,8 +189,9 @@ virtual idx_vector index_vector (void) const { return rep->index_vector (); } - virtual octave_value struct_elt_val (const string& nm) const - { return rep->struct_elt_val (nm); } + virtual octave_value + struct_elt_val (const string& nm, bool silent = false) const + { return rep->struct_elt_val (nm, silent); } virtual octave_value& struct_elt_ref (const string& nm) { return rep->struct_elt_ref (nm); }