# HG changeset patch # User John W. Eaton # Date 1318469310 14400 # Node ID 441af0aa125afea36aa51bb410f48261a4cd53e5 # Parent cb52dd180d36eff5ca1dd28c017fd19275cb784a char: when converting cell elements containing class objects, call overloaded char function if one exists * ov-class.cc, ov-class.h (octave_class::all_strings): New function. diff -r cb52dd180d36 -r 441af0aa125a src/ov-class.cc --- a/src/ov-class.cc Wed Oct 12 20:36:19 2011 -0500 +++ b/src/ov-class.cc Wed Oct 12 21:28:30 2011 -0400 @@ -996,6 +996,35 @@ return retval; } +string_vector +octave_class::all_strings (bool pad) const +{ + string_vector retval; + + octave_value meth = symbol_table::find_method ("char", class_name ()); + + if (meth.is_defined ()) + { + octave_value_list args; + args(0) = octave_value (new octave_class (map, c_name)); + + octave_value_list tmp = feval (meth.function_value (), args, 1); + + if (!error_state && tmp.length () >= 1) + { + if (tmp(0).is_string ()) + retval = tmp(0).all_strings (pad); + else + error ("cname/char method did not return a character string"); + } + } + else + error ("no char method defined for class %s", class_name().c_str ()); + + return retval; +} + + void octave_class::print (std::ostream& os, bool) const { diff -r cb52dd180d36 -r 441af0aa125a src/ov-class.h --- a/src/ov-class.h Wed Oct 12 20:36:19 2011 -0500 +++ b/src/ov-class.h Wed Oct 12 21:28:30 2011 -0400 @@ -168,6 +168,8 @@ octave_base_value *unique_parent_class (const std::string&); + string_vector all_strings (bool pad) const; + void print (std::ostream& os, bool pr_as_read_syntax = false) const; void print_raw (std::ostream& os, bool pr_as_read_syntax = false) const;