diff src/ov-base-int.cc @ 5992:4289ed95dde8

[project @ 2006-09-15 20:29:18 by jwe]
author jwe
date Fri, 15 Sep 2006 20:29:18 +0000
parents 85c7dc4afe6b
children 47f4f4e88166
line wrap: on
line diff
--- a/src/ov-base-int.cc	Fri Sep 15 17:30:23 2006 +0000
+++ b/src/ov-base-int.cc	Fri Sep 15 20:29:18 2006 +0000
@@ -69,6 +69,48 @@
 }
 
 template <class T>
+octave_value
+octave_base_int_matrix<T>::convert_to_str_internal (bool, bool, char type) const
+{
+  octave_value retval;
+  dim_vector dv = this->dims ();
+  octave_idx_type nel = dv.numel ();
+
+  charNDArray chm (dv);
+
+  bool warned = false;
+
+  for (octave_idx_type i = 0; i < nel; i++)
+    {
+      OCTAVE_QUIT;
+
+      typename T::elt_type tmp = this->matrix(i);
+
+      typename T::elt_type::val_type ival = tmp.value ();
+
+      if (ival < 0 || ival > UCHAR_MAX)
+	{
+	  // FIXME -- is there something better we could do?
+
+	  ival = 0;
+
+	  if (! warned)
+	    {
+
+	      ::warning ("range error for conversion to character value");
+	      warned = true;
+	    }
+	}
+      else
+	chm (i) = static_cast<char> (ival);
+    }
+
+  retval = octave_value (chm, true, type);
+
+  return retval;
+}
+
+template <class T>
 bool
 octave_base_int_matrix<T>::save_ascii (std::ostream& os, bool&)
 {
@@ -330,6 +372,30 @@
 }
 
 template <class T>
+octave_value
+octave_base_int_scalar<T>::convert_to_str_internal (bool, bool, char type) const
+{
+  octave_value retval;
+
+  T tmp = this->scalar;
+
+  typename T::val_type ival = tmp.value ();
+
+  if (ival < 0 || ival > UCHAR_MAX)
+    {
+      // FIXME -- is there something better we could do?
+
+      ival = 0;
+
+      ::warning ("range error for conversion to character value");
+    }
+  else
+    retval = octave_value (std::string (1, static_cast<char> (ival)), type);
+
+  return retval;
+}
+
+template <class T>
 bool
 octave_base_int_scalar<T>::save_ascii (std::ostream& os, bool&)
 {