Mercurial > hg > octave-lyh
changeset 2901:e6d25bc478dd
[project @ 1997-04-30 03:41:26 by jwe]
author | jwe |
---|---|
date | Wed, 30 Apr 1997 03:43:29 +0000 |
parents | 5ed088015839 |
children | c5b7a019b9ed |
files | src/ov-base.cc src/ov-base.h src/ov-bool-mat.cc src/ov-bool-mat.h src/ov-bool.cc src/ov-bool.h src/ov-ch-mat.cc src/ov-ch-mat.h src/ov-colon.cc src/ov-colon.h src/ov-complex.cc src/ov-complex.h src/ov-cx-mat.cc src/ov-cx-mat.h src/ov-file.cc src/ov-file.h src/ov-list.cc src/ov-list.h src/ov-range.cc src/ov-range.h src/ov-re-mat.cc src/ov-re-mat.h src/ov-scalar.cc src/ov-scalar.h src/ov-str-mat.cc src/ov-str-mat.h src/ov-struct.cc src/ov-struct.h src/ov-va-args.cc src/ov-va-args.h |
diffstat | 30 files changed, 676 insertions(+), 91 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ov-base.cc +++ b/src/ov-base.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "lo-ieee.h" #include "gripes.h" @@ -99,11 +101,27 @@ } void -octave_base_value::print (ostream&, bool) +octave_base_value::print (ostream&, bool) const { gripe_wrong_type_arg ("octave_base_value::print()", type_name ()); } +void +octave_base_value::print_raw (ostream&, bool) const +{ + gripe_wrong_type_arg ("octave_base_value::print_raw()", type_name ()); +} + +bool +octave_base_value::print_name_tag (ostream& os, const string& name) const +{ + indent (os); + os << name << " ="; + newline (os); + newline (os); + return true; +} + double octave_base_value::double_value (bool) const { @@ -178,6 +196,22 @@ return retval; } +octave_stream * +octave_base_value::stream_value (void) const +{ + octave_stream *retval = 0; + gripe_wrong_type_arg ("octave_base_value::stream_value()", type_name ()); + return retval; +} + +int +octave_base_value::stream_number (void) const +{ + int retval = -1; + gripe_wrong_type_arg ("octave_base_value::stream_number()", type_name ()); + return retval; +} + octave_value_list octave_base_value::list_value (void) const {
--- a/src/ov-base.h +++ b/src/ov-base.h @@ -100,6 +100,8 @@ bool is_map (void) const { return false; } + bool is_file (void) const { return false; } + bool is_list (void) const { return false; } bool is_magic_colon (void) const { return false; } @@ -152,6 +154,10 @@ Octave_map map_value (void) const; + octave_stream *stream_value (void) const; + + int stream_number (void) const; + octave_value_list list_value (void) const; bool bool_value (void) const; @@ -174,7 +180,11 @@ void convert_to_row_or_column_vector (void); - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-bool-mat.cc +++ b/src/ov-bool-mat.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "lo-ieee.h" #include "mx-base.h" @@ -209,11 +211,42 @@ } void -octave_bool_matrix::print (ostream& os, bool pr_as_read_syntax) +octave_bool_matrix::print (ostream& os, bool pr_as_read_syntax) const +{ + indent (os); + print_raw (os, pr_as_read_syntax); + newline (os); +} + +void +octave_bool_matrix::print_raw (ostream& os, bool pr_as_read_syntax) const { Matrix tmp (matrix); + octave_print_internal (os, tmp, pr_as_read_syntax, + current_print_indent_level ()); +} - octave_print_internal (os, tmp, pr_as_read_syntax, struct_indent); +bool +octave_bool_matrix::print_name_tag (ostream& os, const string& name) const +{ + bool retval = false; + + int nr = rows (); + int nc = columns (); + + indent (os); + + if (nr == 1 && nc == 1 || (nr == 0 || nc == 0)) + os << name << " = "; + else + { + os << name << " ="; + newline (os); + newline (os); + retval = true; + } + + return retval; } /*
--- a/src/ov-bool-mat.h +++ b/src/ov-bool-mat.h @@ -122,7 +122,11 @@ octave_value hermitian (void) const { return octave_value (matrix.transpose ()); } - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-bool.cc +++ b/src/ov-bool.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "mx-base.h" #include "gripes.h" @@ -111,11 +113,27 @@ } void -octave_bool::print (ostream& os, bool pr_as_read_syntax) +octave_bool::print (ostream& os, bool pr_as_read_syntax) const +{ + indent (os); + print_raw (os, pr_as_read_syntax); + newline (os); +} + +void +octave_bool::print_raw (ostream& os, bool pr_as_read_syntax) const { octave_print_internal (os, scalar, pr_as_read_syntax); } +bool +octave_bool::print_name_tag (ostream& os, const string& name) const +{ + indent (os); + os << name << " = "; + return false; +} + /* ;;; Local Variables: *** ;;; mode: C++ ***
--- a/src/ov-bool.h +++ b/src/ov-bool.h @@ -122,7 +122,11 @@ octave_value convert_to_str (void) const; - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-ch-mat.cc +++ b/src/ov-ch-mat.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "lo-ieee.h" #include "mx-base.h" @@ -94,9 +96,41 @@ } void -octave_char_matrix::print (ostream& os, bool pr_as_read_syntax) +octave_char_matrix::print (ostream& os, bool pr_as_read_syntax) const +{ + indent (os); + print_raw (os, pr_as_read_syntax); + newline (os); +} + +void +octave_char_matrix::print_raw (ostream& os, bool pr_as_read_syntax) const +{ + octave_print_internal (os, matrix, pr_as_read_syntax, false, + current_print_indent_level ()); +} + +bool +octave_char_matrix::print_name_tag (ostream& os, const string& name) const { - octave_print_internal (os, matrix, pr_as_read_syntax, false, struct_indent); + bool retval = false; + + int nr = rows (); + int nc = columns (); + + indent (os); + + if (nr == 1 && nc == 1 || (nr == 0 || nc == 0)) + os << name << " = "; + else + { + os << name << " ="; + newline (os); + newline (os); + retval = true; + } + + return retval; } /*
--- a/src/ov-ch-mat.h +++ b/src/ov-ch-mat.h @@ -122,7 +122,11 @@ octave_value hermitian (void) const { return octave_value (matrix.transpose ()); } - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-colon.cc +++ b/src/ov-colon.cc @@ -39,7 +39,14 @@ const string octave_magic_colon::t_name ("magic-colon"); void -octave_magic_colon::print (ostream& os, bool) +octave_magic_colon::print (ostream& os, bool) const +{ + indent (os); + print_raw (os); +} + +void +octave_magic_colon::print_raw (ostream& os, bool) const { os << ":"; }
--- a/src/ov-colon.h +++ b/src/ov-colon.h @@ -68,7 +68,9 @@ bool valid_as_zero_index (void) const { return false; } - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; int type_id (void) const { return t_id; }
--- a/src/ov-complex.cc +++ b/src/ov-complex.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "lo-ieee.h" #include "oct-obj.h" @@ -153,11 +155,27 @@ } void -octave_complex::print (ostream& os, bool pr_as_read_syntax) +octave_complex::print (ostream& os, bool pr_as_read_syntax) const +{ + indent (os); + print_raw (os, pr_as_read_syntax); + newline (os); +} + +void +octave_complex::print_raw (ostream& os, bool pr_as_read_syntax) const { octave_print_internal (os, scalar, pr_as_read_syntax); } +bool +octave_complex::print_name_tag (ostream& os, const string& name) const +{ + indent (os); + os << name << " = "; + return false; +} + /* ;;; Local Variables: *** ;;; mode: C++ ***
--- a/src/ov-complex.h +++ b/src/ov-complex.h @@ -120,7 +120,11 @@ void decrement (void) { scalar -= 1.0; } - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-cx-mat.cc +++ b/src/ov-cx-mat.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "lo-ieee.h" #include "mx-base.h" @@ -305,9 +307,41 @@ } void -octave_complex_matrix::print (ostream& os, bool pr_as_read_syntax) +octave_complex_matrix::print (ostream& os, bool pr_as_read_syntax) const +{ + indent (os); + print_raw (os, pr_as_read_syntax); + newline (os); +} + +void +octave_complex_matrix::print_raw (ostream& os, bool pr_as_read_syntax) const +{ + octave_print_internal (os, matrix, pr_as_read_syntax, + current_print_indent_level ()); +} + +bool +octave_complex_matrix::print_name_tag (ostream& os, const string& name) const { - octave_print_internal (os, matrix, pr_as_read_syntax, struct_indent); + bool retval = false; + + int nr = rows (); + int nc = columns (); + + indent (os); + + if (nr == 1 && nc == 1 || (nr == 0 || nc == 0)) + os << name << " = "; + else + { + os << name << " ="; + newline (os); + newline (os); + retval = true; + } + + return retval; } /*
--- a/src/ov-cx-mat.h +++ b/src/ov-cx-mat.h @@ -132,7 +132,11 @@ void decrement (void) { matrix -= 1.0; } - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
new file mode 100644 --- /dev/null +++ b/src/ov-file.cc @@ -0,0 +1,108 @@ +/* + +Copyright (C) 1996, 1997 John W. Eaton + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#if defined (__GNUG__) +#pragma implementation +#endif + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <iostream.h> + +#include "oct-stream.h" +#include "ops.h" +#include "ov-file.h" +#include "ov-scalar.h" +#include "unwind-prot.h" + +octave_allocator +octave_file::allocator (sizeof (octave_file)); + +int +octave_file::t_id (-1); + +const string +octave_file::t_name ("file"); + +static octave_value * +default_numeric_conversion_function (const octave_value& a) +{ + CAST_CONV_ARG (const octave_file&); + + return new octave_scalar (static_cast<double> (v.stream_number ())); +} + +type_conv_fcn +octave_file::numeric_conversion_function (void) const +{ + return default_numeric_conversion_function; +} + +void +octave_file::print (ostream& os, bool) const +{ + indent (os); + print_raw (os); + newline (os); +} + +void +octave_file::print_raw (ostream& os, bool) const +{ + os << "{"; newline (os); + + if (stream) + { + increment_indent_level (); + + string name = stream->name (); + string mode = octave_stream::mode_as_string (stream->mode ()); + string arch + = oct_mach_info::float_format_as_string (stream->float_format ()); + + indent (os); os << "id = " << number; newline (os); + indent (os); os << "name = " << name; newline (os); + indent (os); os << "mode = " << mode; newline (os); + indent (os); os << "arch = " << arch; newline (os); + + decrement_indent_level (); + } + + indent (os); os << "}"; +} + +bool +octave_file::print_name_tag (ostream& os, const string& name) const +{ + indent (os); + os << name << " ="; + newline (os); + return false; +} + +/* +;;; Local Variables: *** +;;; mode: C++ *** +;;; End: *** +*/
new file mode 100644 --- /dev/null +++ b/src/ov-file.h @@ -0,0 +1,122 @@ +/* + +Copyright (C) 1996, 1997 John W. Eaton + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#if !defined (octave_file_h) +#define octave_file_h 1 + +#if defined (__GNUG__) +#pragma interface +#endif + +#include <cstdlib> + +#include <string> + +class ostream; + +#include "oct-alloc.h" +#include "ov-base.h" +#include "ov-typeinfo.h" + +class tree_walker; +class octave_stream; +class octave_value; +class octave_value_list; + +// Lists. + +class +octave_file : public octave_base_value +{ +public: + + octave_file (void) + : octave_base_value (), stream (0), number (-1) { } + + octave_file (octave_stream *s, int n) + : octave_base_value (), stream (s), number (n) { } + + octave_file (const octave_file& f) + : octave_base_value (), stream (f.stream), number (f.number) { } + + ~octave_file (void) { } + + octave_value *clone (void) { return new octave_file (*this); } + + void *operator new (size_t size) + { return allocator.alloc (size); } + + void operator delete (void *p, size_t size) + { allocator.free (p, size); } + + type_conv_fcn numeric_conversion_function (void) const; + + double double_value (void) const { return static_cast<double> (number); } + + octave_stream *stream_value (void) const { return stream; } + + int stream_number (void) const { return number; } + + bool is_defined (void) const { return true; } + + bool is_file (void) const { return true; } + + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; + + int type_id (void) const { return t_id; } + + string type_name (void) const { return t_name; } + + static int static_type_id (void) { return t_id; } + + static void register_type (void) + { t_id = octave_value_typeinfo::register_type (t_name); } + +private: + + // The stream object. + octave_stream *stream; + + // The number of the beast. + int number; + + // For custom memory management. + static octave_allocator allocator; + + // Type id of list objects, set by register_type(). + static int t_id; + + // Type name of list objects, defined in ov-list.cc. + static const string t_name; +}; + +#endif + +/* +;;; Local Variables: *** +;;; mode: C++ *** +;;; End: *** +*/
--- a/src/ov-list.cc +++ b/src/ov-list.cc @@ -80,50 +80,51 @@ } void -octave_list::print (ostream& os, bool) +octave_list::print (ostream& os, bool) const +{ + print_raw (os); +} + +void +octave_list::print_raw (ostream& os, bool) const { begin_unwind_frame ("octave_list_print"); - unwind_protect_int (list_indent); + indent (os); + os << "("; + newline (os); - os.form ("\n%*s{\n", list_indent, ""); - - increment_list_indent (); + increment_indent_level (); int n = lst.length (); for (int i = 0; i < n; i++) { - bool pad_after = false; - octave_value val = lst(i); - os.form ("%*s", list_indent, ""); - - if (val.print_as_scalar ()) - os << " "; - else if (val.is_list ()) - pad_after = true; - else - { - pad_after = true; - - os << "\n\n"; - } + indent (os); val.print (os); - - if (pad_after) - os << "\n"; } - decrement_list_indent (); + decrement_indent_level (); - os.form ("%*s%s", list_indent, "", "}\n"); + indent (os); + os << ")"; + newline (os); run_unwind_frame ("octave_list_print"); } +bool +octave_list::print_name_tag (ostream& os, const string& name) const +{ + indent (os); + os << name << " ="; + newline (os); + return false; +} + DEFUN (make_list, args, , "make_list (ARGS)\n\ \n\
--- a/src/ov-list.h +++ b/src/ov-list.h @@ -78,7 +78,11 @@ octave_value_list list_value (void) const { return lst; } - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-range.cc +++ b/src/ov-range.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "lo-ieee.h" #include "lo-utils.h" @@ -202,9 +204,40 @@ } void -octave_range::print (ostream& os, bool pr_as_read_syntax) +octave_range::print (ostream& os, bool pr_as_read_syntax) const +{ + indent (os); + print_raw (os, pr_as_read_syntax); + newline (os); +} + +void +octave_range::print_raw (ostream& os, bool pr_as_read_syntax) const +{ + octave_print_internal (os, range, pr_as_read_syntax, + current_print_indent_level ()); +} + +bool +octave_range::print_name_tag (ostream& os, const string& name) const { - octave_print_internal (os, range, pr_as_read_syntax, struct_indent); + bool retval = false; + + int n = range.nelem (); + + indent (os); + + if (n == 0 || n == 1) + os << name << " = "; + else + { + os << name << " ="; + newline (os); + newline (os); + retval = true; + } + + return retval; } /*
--- a/src/ov-range.h +++ b/src/ov-range.h @@ -147,7 +147,11 @@ octave_value convert_to_str (void) const; - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-re-mat.cc +++ b/src/ov-re-mat.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "lo-ieee.h" #include "lo-utils.h" #include "mx-base.h" @@ -259,9 +261,41 @@ } void -octave_matrix::print (ostream& os, bool pr_as_read_syntax) +octave_matrix::print (ostream& os, bool pr_as_read_syntax) const +{ + indent (os); + print_raw (os, pr_as_read_syntax); + newline (os); +} + +void +octave_matrix::print_raw (ostream& os, bool pr_as_read_syntax) const +{ + octave_print_internal (os, matrix, pr_as_read_syntax, + current_print_indent_level ()); +} + +bool +octave_matrix::print_name_tag (ostream& os, const string& name) const { - octave_print_internal (os, matrix, pr_as_read_syntax, struct_indent); + bool retval = false; + + int nr = rows (); + int nc = columns (); + + indent (os); + + if (nr == 1 && nc == 1 || (nr == 0 || nc == 0)) + os << name << " = "; + else + { + os << name << " ="; + newline (os); + newline (os); + retval = true; + } + + return retval; } /*
--- a/src/ov-re-mat.h +++ b/src/ov-re-mat.h @@ -133,7 +133,11 @@ octave_value convert_to_str (void) const; - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-scalar.cc +++ b/src/ov-scalar.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "defun.h" #include "gripes.h" #include "oct-obj.h" @@ -108,11 +110,27 @@ } void -octave_scalar::print (ostream& os, bool pr_as_read_syntax) +octave_scalar::print (ostream& os, bool pr_as_read_syntax) const +{ + indent (os); + print_raw (os, pr_as_read_syntax); + newline (os); +} + +void +octave_scalar::print_raw (ostream& os, bool pr_as_read_syntax) const { octave_print_internal (os, scalar, pr_as_read_syntax); } +bool +octave_scalar::print_name_tag (ostream& os, const string& name) const +{ + indent (os); + os << name << " = "; + return false; +} + /* ;;; Local Variables: *** ;;; mode: C++ ***
--- a/src/ov-scalar.h +++ b/src/ov-scalar.h @@ -121,7 +121,11 @@ octave_value convert_to_str (void) const; - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-str-mat.cc +++ b/src/ov-str-mat.cc @@ -28,6 +28,8 @@ #include <config.h> #endif +#include <iostream.h> + #include "lo-ieee.h" #include "mx-base.h" @@ -216,10 +218,38 @@ } void -octave_char_matrix_str::print (ostream& os, bool pr_as_read_syntax) +octave_char_matrix_str::print (ostream& os, bool pr_as_read_syntax) const +{ + indent (os); + print_raw (os, pr_as_read_syntax); + newline (os); +} + +void +octave_char_matrix_str::print_raw (ostream& os, bool pr_as_read_syntax) const { octave_print_internal (os, matrix, pr_as_read_syntax, true, - struct_indent); + current_print_indent_level ()); +} + +bool +octave_char_matrix_str::print_name_tag (ostream& os, const string& name) const +{ + bool retval = false; + + indent (os); + + if (rows () == 1) + os << name << " = "; + else + { + os << name << " ="; + newline (os); + newline (os); + retval = true; + } + + return retval; } /*
--- a/src/ov-str-mat.h +++ b/src/ov-str-mat.h @@ -108,7 +108,11 @@ octave_value hermitian (void) const { return octave_value (matrix.transpose (), true); } - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-struct.cc +++ b/src/ov-struct.cc @@ -65,7 +65,13 @@ } void -octave_struct::print (ostream& os, bool) +octave_struct::print (ostream& os, bool) const +{ + print_raw (os); +} + +void +octave_struct::print_raw (ostream& os, bool) const { // XXX FIXME XXX -- would be nice to print the output in some // standard order. Maybe all substructures first, maybe @@ -73,59 +79,49 @@ begin_unwind_frame ("octave_struct_print"); - unwind_protect_int (struct_indent); unwind_protect_int (Vstruct_levels_to_print); if (Vstruct_levels_to_print-- > 0) { - os.form ("\n%*s{\n", struct_indent, ""); - - increment_struct_indent (); + newline (os); + indent (os); + os << "{"; + newline (os); - Pix p = map.first (); + increment_indent_level (); - while (p) + for (Pix p = map.first (); p; map.next (p)) { - bool pad_after = false; - string key = map.key (p); octave_value val = map.contents (p); - map.next (p); - - os.form ("%*s%s =", struct_indent, "", key.c_str ()); - - if (val.print_as_scalar ()) - os << " "; - else if (val.is_map ()) - { - if (p) - pad_after = true; - } - else - { - if (p) - pad_after = true; - - os << "\n\n"; - } - - val.print (os); - - if (pad_after) - os << "\n"; + val.print_with_name (os, key); } - decrement_struct_indent (); + decrement_indent_level (); - os.form ("%*s%s", struct_indent, "", "}\n"); + indent (os); + os << "}"; + newline (os); } else - os << " <structure>\n"; + { + os << " <structure>"; + newline (os); + } run_unwind_frame ("octave_struct_print"); } +bool +octave_struct::print_name_tag (ostream& os, const string& name) const +{ + indent (os); + os << name << " ="; + newline (os); + return false; +} + /* ;;; Local Variables: *** ;;; mode: C++ ***
--- a/src/ov-struct.h +++ b/src/ov-struct.h @@ -83,7 +83,11 @@ Octave_map map_value (void) const { return map; } - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; + + bool print_name_tag (ostream& os, const string& name) const; int type_id (void) const { return t_id; }
--- a/src/ov-va-args.cc +++ b/src/ov-va-args.cc @@ -39,7 +39,14 @@ const string octave_all_va_args::t_name ("va-arg"); void -octave_all_va_args::print (ostream& os, bool) +octave_all_va_args::print (ostream& os, bool) const +{ + indent (os); + print (os); +} + +void +octave_all_va_args::print_raw (ostream& os, bool) const { os << "all_va_args"; }
--- a/src/ov-va-args.h +++ b/src/ov-va-args.h @@ -62,7 +62,9 @@ bool is_all_va_args (void) const { return true; } - void print (ostream& os, bool pr_as_read_syntax = false); + void print (ostream& os, bool pr_as_read_syntax = false) const; + + void print_raw (ostream& os, bool pr_as_read_syntax = false) const; int type_id (void) const { return t_id; }