comparison libinterp/octave-value/ov-classdef.cc @ 18416:bcd71a2531d3

Support disp/display overloading in classdef * ov-classdef.h (octave_classdef::print, octave_classdef::print_raw): Move definition to C++ file. (octave_classdef::print_as_scalar): Removed method. (octave_classdef::print_name_tag, octave_classdef::print_with_name): New methods. * ov-classdef.cc (octave_classdef::print): Moved from header. (octave_classdef::print_raw): Likewise. Call overloaded disp, if defined and not called from builtin. (octave_classdef::print_name_tag): New method. (octave_classdef::print_with_name): New method, calls overloaded "display" if defined. * pr-output.cc (octave_print_internal(std::ostream, bool): Avoid compilation warning. (Frats, Fdisp, Ffdisp): Allow to call non-const octave_value::print. * ov.h (octave_value::print): Make non-const. * ov-base.h (octave_base_value::print): Likewise. * ov-base.cc (octave_base_value::print): Likewise. * ov-base-diag.h (octave_base_diag::print): Likewise. * ov-base-diag.cc (octave_base_diag::print): Likewise. * ov-base-mat.h (octave_base_matrix::print): Likewise. * ov-base-mat.cc (octave_base_matrix::print): Likewise. * ov-base-scalar.h (octave_base_scalar::print): Likewise. * ov-base-scalar.cc (octave_base_scalar::print): Likewise. * ov-base-sparse.h (octave_base_sparse::print): Likewise. * ov-base-sparse.cc (octave_base_sparse::print): Likewise. * ov-cell.h (octave_cell::print): Likewise. * ov-cell.cc (octave_cell::print): Likewise. * ov-class.h (octave_class::print): Likewise. * ov-class.cc (octave_class::print): Likewise. * ov-colon.h (octave_magic_colon::print): Likewise. * ov-colon.cc (octave_magic_colon::print): Likewise. * ov-fcn-handle.h (octave_fcn_handle::print): Likewise. * ov-fcn-handle.cc (octave_fcn_handle::print): Likewise. * ov-fcn-inline.h (octave_fcn_inline::print): Likewise. * ov-fcn-inline.cc (octave_fcn_inline::print): Likewise. * ov-java.h (octave_java::print): Likewise. * ov-java.cc (octave_java::print): Likewise. * ov-lazy-idx.h (octave_lazy_index::print): Likewise. * ov-oncleanup.h (octave_oncleanup::print): Likewise. * ov-oncleanup.cc (octave_oncleanup::print): Likewise. * ov-perm.h (octave_perm_matrix::print): Likewise. * ov-perm.cc (octave_perm_matrix::print): Likewise. * ov-range.h (octave_range::print): Likewise. * ov-range.cc (octave_range::print): Likewise. * ov-struct.h (octave_struct::print, octave_scalar_struct): Likewise. * ov-struct.cc (octave_struct::print, octave_scalar_struct): Likewise.
author Michael Goffioul <michael.goffioul@gmail.com>
date Fri, 31 Jan 2014 11:41:19 -0500
parents 642fc1165f3f
children d5aa615dcf4c
comparison
equal deleted inserted replaced
18414:68fc31c69fcb 18416:bcd71a2531d3
1014 } 1014 }
1015 else 1015 else
1016 return octave_base_value::undef_subsasgn (type, idx, rhs); 1016 return octave_base_value::undef_subsasgn (type, idx, rhs);
1017 1017
1018 return octave_value (); 1018 return octave_value ();
1019 }
1020
1021 void
1022 octave_classdef::print (std::ostream& os, bool)
1023 {
1024 if (! called_from_builtin ())
1025 {
1026 cdef_method meth = object.get_class ().find_method ("disp");
1027
1028 if (meth.ok ())
1029 {
1030 octave_value_list args;
1031
1032 count++;
1033 args(0) = octave_value (this);
1034
1035 indent (os);
1036 meth.execute (args, 0, true, "disp");
1037
1038 return;
1039 }
1040 }
1041
1042 print_raw (os);
1043 }
1044
1045 void
1046 octave_classdef::print_raw (std::ostream& os, bool) const
1047 {
1048 indent (os);
1049 os << "<object ";
1050 if (object.is_array ())
1051 os << "array ";
1052 os << class_name () << ">";
1053 newline (os);
1054 }
1055
1056 bool
1057 octave_classdef::print_name_tag (std::ostream& os,
1058 const std::string& name) const
1059 {
1060 return octave_base_value::print_name_tag (os, name);
1061 }
1062
1063 void
1064 octave_classdef::print_with_name (std::ostream& os, const std::string& name,
1065 bool print_padding)
1066 {
1067 cdef_method meth = object.get_class ().find_method ("display");
1068
1069 if (meth.ok ())
1070 {
1071 octave_value_list args;
1072
1073 count++;
1074 args(0) = octave_value (this);
1075
1076 string_vector arg_names (1);
1077
1078 arg_names[0] = name;
1079 args.stash_name_tags (arg_names);
1080
1081 indent (os);
1082 meth.execute (args, 0, true, "display");
1083 }
1084 else
1085 octave_base_value::print_with_name (os, name, print_padding);
1019 } 1086 }
1020 1087
1021 //---------------------------------------------------------------------------- 1088 //----------------------------------------------------------------------------
1022 1089
1023 class octave_classdef_meta : public octave_function 1090 class octave_classdef_meta : public octave_function