diff libinterp/corefcn/pr-output.cc @ 24760:b784d68f7c44

fix printing of logical values (bug #53160) * pr-output.h, pr-output.cc (make_format): Provide specialization for boolNDArray objects. (octave_print_internal): Define more consistently.
author John W. Eaton <jwe@octave.org>
date Wed, 14 Feb 2018 23:28:40 -0500
parents 6114be517240
children d7c3918955e6
line wrap: on
line diff
--- a/libinterp/corefcn/pr-output.cc	Wed Feb 14 16:08:12 2018 -0800
+++ b/libinterp/corefcn/pr-output.cc	Wed Feb 14 23:28:40 2018 -0500
@@ -1647,6 +1647,13 @@
   return make_format (FloatComplexMatrix (nda), r_fw, i_fw, scale);
 }
 
+template <>
+float_display_format
+make_format (const boolNDArray&)
+{
+  return float_display_format (float_format (1, 1));
+}
+
 // FIXME: all this mess with abs is an attempt to avoid seeing
 //
 //   warning: comparison of unsigned expression < 0 is always false
@@ -1775,17 +1782,23 @@
 MAKE_INT_SCALAR_FORMAT (uint64_t)
 
 void
-octave_print_internal (std::ostream&, char, bool)
+octave_print_internal (std::ostream& os, const float_display_format& fmt,
+                       bool d, bool pr_as_read_syntax)
 {
-  panic_impossible ();
+  octave_print_internal (os, fmt, octave_uint8 (d), pr_as_read_syntax);
 }
 
 void
-octave_print_internal (std::ostream& os, double d,
-                       bool pr_as_read_syntax)
+octave_print_internal (std::ostream& os, bool d, bool pr_as_read_syntax)
 {
-  set_format (d);
-  octave_print_internal (os, curr_float_display_fmt, d, pr_as_read_syntax);
+  octave_print_internal (os, octave_uint8 (d), pr_as_read_syntax);
+}
+
+void
+octave_print_internal (std::ostream&, const float_display_format&,
+                       char, bool)
+{
+  panic_impossible ();
 }
 
 void
@@ -2202,14 +2215,6 @@
     os << 'c';
 }
 
-void
-octave_print_internal (std::ostream& os, const Complex& c,
-                       bool pr_as_read_syntax)
-{
-  set_format (c);
-  octave_print_internal (os, curr_float_display_fmt, c, pr_as_read_syntax);
-}
-
 extern void
 octave_print_internal (std::ostream& os, const float_display_format& fmt,
                        const Complex& c, bool pr_as_read_syntax)
@@ -2666,21 +2671,9 @@
     }
 }
 
-void
-octave_print_internal (std::ostream& os, bool d, bool pr_as_read_syntax)
-{
-  octave_print_internal (os, octave_uint8 (d), pr_as_read_syntax);
-}
-
 // FIXME: write single precision versions of the printing functions.
 
 void
-octave_print_internal (std::ostream& os, float d, bool pr_as_read_syntax)
-{
-  octave_print_internal (os, double (d), pr_as_read_syntax);
-}
-
-void
 octave_print_internal (std::ostream& os, const FloatMatrix& m,
                        bool pr_as_read_syntax, int extra_indent)
 {
@@ -2702,13 +2695,6 @@
 }
 
 void
-octave_print_internal (std::ostream& os, const FloatComplex& c,
-                       bool pr_as_read_syntax)
-{
-  octave_print_internal (os, Complex (c), pr_as_read_syntax);
-}
-
-void
 octave_print_internal (std::ostream& os, const FloatComplexMatrix& cm,
                        bool pr_as_read_syntax, int extra_indent)
 {