diff src/ov-intx.h @ 7789:82be108cc558

First attempt at single precision tyeps * * * corrections to qrupdate single precision routines * * * prefer demotion to single over promotion to double * * * Add single precision support to log2 function * * * Trivial PROJECT file update * * * Cache optimized hermitian/transpose methods * * * Add tests for tranpose/hermitian and ChangeLog entry for new transpose code
author David Bateman <dbateman@free.fr>
date Sun, 27 Apr 2008 22:34:17 +0200
parents 99c410f7f0b0
children f336dd8e96d0
line wrap: on
line diff
--- a/src/ov-intx.h	Wed May 14 18:09:56 2008 +0200
+++ b/src/ov-intx.h	Sun Apr 27 22:34:17 2008 +0200
@@ -111,8 +111,29 @@
       
     }
 
+  float
+  float_value (bool = false) const
+    {
+      float retval = lo_ieee_float_nan_value ();
+
+      if (numel () > 0)
+	{
+	  gripe_implicit_conversion ("Octave:array-as-scalar",
+				     type_name (), "real scalar");
+
+	  retval = matrix(0).float_value ();
+	}
+      else
+	gripe_invalid_conversion (type_name (), "real scalar");
+
+      return retval;
+      
+    }
+
   double scalar_value (bool = false) const { return double_value (); }
 
+  float float_scalar_value (bool = false) const { return float_value (); }
+
   Matrix
   matrix_value (bool = false) const
     {
@@ -131,6 +152,24 @@
       return retval;
     }
 
+  FloatMatrix
+  float_matrix_value (bool = false) const
+    {
+      FloatMatrix retval;
+      dim_vector dv = dims ();
+      if (dv.length () > 2)
+	error ("invalid conversion of %s to FloatMatrix", type_name().c_str ());
+      else
+	{
+	  retval = FloatMatrix (dv(0), dv(1));
+	  float *vec = retval.fortran_vec ();
+	  octave_idx_type nel = matrix.numel ();
+	  for (octave_idx_type i = 0; i < nel; i++)
+	    vec[i] = matrix(i).float_value ();
+	}
+      return retval;
+    }
+
   ComplexMatrix
   complex_matrix_value (bool = false) const
     {
@@ -149,6 +188,24 @@
       return retval;
     }
 
+  FloatComplexMatrix
+  float_complex_matrix_value (bool = false) const
+    {
+      FloatComplexMatrix retval;
+      dim_vector dv = dims();
+      if (dv.length () > 2)
+	error ("invalid conversion of %s to FloatMatrix", type_name().c_str ());
+      else
+	{
+	  retval = FloatComplexMatrix (dv(0), dv(1));
+	  FloatComplex *vec = retval.fortran_vec ();
+	  octave_idx_type nel = matrix.numel ();
+	  for (octave_idx_type i = 0; i < nel; i++)
+	    vec[i] = FloatComplex (matrix(i).float_value ());
+	}
+      return retval;
+    }
+
   NDArray
   array_value (bool = false) const
     { 
@@ -160,6 +217,17 @@
       return retval;
     }
 
+  FloatNDArray
+  float_array_value (bool = false) const
+    { 
+      FloatNDArray retval (matrix.dims ()); 
+      float *vec = retval.fortran_vec ();
+      octave_idx_type nel = matrix.numel ();
+      for (octave_idx_type i = 0; i < nel; i++)
+        vec[i] = matrix(i).float_value ();
+      return retval;
+    }
+
   ComplexNDArray
   complex_array_value (bool = false) const
     { 
@@ -171,6 +239,17 @@
       return retval;
     }
 
+  FloatComplexNDArray
+  float_complex_array_value (bool = false) const
+    { 
+      FloatComplexNDArray retval (matrix.dims ()); 
+      FloatComplex *vec = retval.fortran_vec ();
+      octave_idx_type nel = matrix.numel ();
+      for (octave_idx_type i = 0; i < nel; i++)
+        vec[i] = FloatComplex (matrix(i).float_value ());
+      return retval;
+    }
+
   boolNDArray
   bool_array_value (bool warn = false) const
   {
@@ -403,8 +482,12 @@
 
   double double_value (bool = false) const { return scalar.double_value (); }
 
+  float float_value (bool = false) const { return scalar.float_value (); }
+
   double scalar_value (bool = false) const { return scalar.double_value (); }
 
+  float float_scalar_value (bool = false) const { return scalar.float_value (); }
+
   Matrix
   matrix_value (bool = false) const
     {
@@ -413,6 +496,14 @@
       return retval;
     }
 
+  FloatMatrix
+  float_matrix_value (bool = false) const
+    {
+      FloatMatrix retval (1, 1);
+      retval(0,0) = scalar.float_value ();
+      return retval;
+    }
+
   ComplexMatrix
   complex_matrix_value (bool = false) const
     {
@@ -421,6 +512,13 @@
       return retval;
     }
 
+  FloatComplexMatrix
+  float_complex_matrix_value (bool = false) const
+    {
+      FloatComplexMatrix retval (1, 1);
+      retval(0,0) = FloatComplex (scalar.float_value ());
+      return retval;
+    }
 
   NDArray
   array_value (bool = false) const
@@ -430,11 +528,27 @@
       return retval;
     }
 
+  FloatNDArray
+  float_array_value (bool = false) const
+    { 
+      FloatNDArray retval (dim_vector (1, 1)); 
+      retval(0) = scalar.float_value ();
+      return retval;
+    }
+
   ComplexNDArray
   complex_array_value (bool = false) const
     { 
       ComplexNDArray retval (dim_vector (1, 1));
-      retval(0) = Complex (scalar.double_value ());
+      retval(0) = FloatComplex (scalar.double_value ());
+      return retval;
+    }
+
+  FloatComplexNDArray
+  float_complex_array_value (bool = false) const
+    { 
+      FloatComplexNDArray retval (dim_vector (1, 1));
+      retval(0) = FloatComplex (scalar.float_value ());
       return retval;
     }