changeset 8458:d254a21e0120

reimplement full as method of octave_base_value
author Jaroslav Hajek <highegg@gmail.com>
date Mon, 12 Jan 2009 13:06:06 +0100
parents c72207960242
children d17874a6f161
files src/ChangeLog src/DLD-FUNCTIONS/sparse.cc src/data.cc src/ov-base-diag.h src/ov-base-mat.h src/ov-base-scalar.h src/ov-base-sparse.h src/ov-base.cc src/ov-base.h src/ov-perm.h src/ov-range.h src/ov.h
diffstat 12 files changed, 51 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ChangeLog	Mon Jan 12 13:06:06 2009 +0100
@@ -1,3 +1,12 @@
+2009-01-12  Jaroslav Hajek  <highegg@gmail.com>
+
+	* ov-base-diag.h, ov-base-mat.h, ov-base-scalar.h, ov-base-sparse.h,
+	ov-base.cc, ov-base.h, ov-perm.h, ov-range.h, ov.h: Add full_value
+	methods to octave_value, octave_base_value and its relevant
+	subclasses.
+	* data.cc (Ffull): New DEFUN.
+	* DLD-FUNCTIONS/sparse.cc (Ffull): move to data.cc.
+
 2009-01-11  Jaroslav Hajek  <highegg@gmail.com>
 	
 	* ov.h (octave_value::is_copy_of): New method.
--- a/src/DLD-FUNCTIONS/sparse.cc	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/DLD-FUNCTIONS/sparse.cc	Mon Jan 12 13:06:06 2009 +0100
@@ -349,46 +349,6 @@
    return retval;
 }
 
-DEFUN_DLD (full, args, ,
-    "-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{FM} =} full (@var{SM})\n\
- returns a full storage matrix from a sparse, diagonal, permutation matrix or a range.\n\
-@seealso{sparse}\n\
-@end deftypefn")
-{
-  octave_value retval;
-
-  if (args.length() < 1)
-    {
-      print_usage ();
-      return retval;
-    }
-
-  if (args(0).is_sparse_type ())
-    {
-      if (args(0).type_name () == "sparse matrix") 
-	retval = args(0).matrix_value ();
-      else if (args(0).type_name () == "sparse complex matrix")
-	retval = args(0).complex_matrix_value ();
-      else if (args(0).type_name () == "sparse bool matrix")
-	retval = args(0).bool_matrix_value ();
-    } 
-  else if (args(0).is_diag_matrix () || args(0).is_perm_matrix ())
-    {
-      octave_value_list idx;
-      idx(0) = idx(1) = ':';
-      retval = args(0).do_index_op (idx);
-    }
-  else if (args(0).is_range ())
-    retval = args(0).matrix_value ();
-  else if (args(0).is_matrix_type ())
-    retval = args(0);
-  else
-    gripe_wrong_type_arg ("full", args(0));
-
-  return retval;
-}
-
 /*
 ;;; Local Variables: ***
 ;;; mode: C++ ***
--- a/src/data.cc	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/data.cc	Mon Jan 12 13:06:06 2009 +0100
@@ -4584,6 +4584,23 @@
   return retval;
 }
 
+DEFUN (full, args, ,
+    "-*- texinfo -*-\n\
+@deftypefn {Loadable Function} {@var{FM} =} full (@var{SM})\n\
+ returns a full storage matrix from a sparse, diagonal, permutation matrix or a range.\n\
+@seealso{sparse}\n\
+@end deftypefn")
+{
+  octave_value retval;
+
+  if (args.length () == 1)
+    retval = args(0).full_value ();
+  else
+    print_usage ();    
+
+  return retval;
+}
+
 // Compute various norms of the vector X.
 
 DEFUN (norm, args, ,
--- a/src/ov-base-diag.h	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ov-base-diag.h	Mon Jan 12 13:06:06 2009 +0100
@@ -62,6 +62,8 @@
 
   octave_value squeeze (void) const { return matrix; }
 
+  octave_value full_value (void) const { return to_dense (); }
+
   octave_value subsref (const std::string& type,
 			const std::list<octave_value_list>& idx);
 
--- a/src/ov-base-mat.h	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ov-base-mat.h	Mon Jan 12 13:06:06 2009 +0100
@@ -72,6 +72,8 @@
 
   octave_value squeeze (void) const { return MT (matrix.squeeze ()); }
 
+  octave_value full_value (void) const { return matrix; }
+
   octave_value subsref (const std::string& type,
 			const std::list<octave_value_list>& idx);
 
--- a/src/ov-base-scalar.h	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ov-base-scalar.h	Mon Jan 12 13:06:06 2009 +0100
@@ -62,6 +62,8 @@
 
   octave_value squeeze (void) const { return scalar; }
 
+  octave_value full_value (void) const { return scalar; }
+
   octave_value subsref (const std::string& type,
 			const std::list<octave_value_list>& idx);
 
--- a/src/ov-base-sparse.h	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ov-base-sparse.h	Mon Jan 12 13:06:06 2009 +0100
@@ -84,6 +84,8 @@
 
   octave_value squeeze (void) const { return matrix.squeeze (); }
 
+  octave_value full_value (void) const { return matrix.matrix_value (); }
+
   octave_value subsref (const std::string& type,
 			const std::list<octave_value_list>& idx);
 
--- a/src/ov-base.cc	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ov-base.cc	Mon Jan 12 13:06:06 2009 +0100
@@ -74,6 +74,13 @@
 }
 
 octave_value
+octave_base_value::full_value (void) const
+{
+  gripe_wrong_type_arg ("full: invalid operation for %s type", type_name ());
+  return octave_value ();
+}
+
+octave_value
 octave_base_value::subsref (const std::string&,
 			    const std::list<octave_value_list>&)
 {
--- a/src/ov-base.h	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ov-base.h	Mon Jan 12 13:06:06 2009 +0100
@@ -148,6 +148,8 @@
 
   virtual octave_value squeeze (void) const;
 
+  virtual octave_value full_value (void) const;
+
   virtual octave_base_value *try_narrowing_conversion (void) { return 0; }
 
   virtual octave_value
--- a/src/ov-perm.h	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ov-perm.h	Mon Jan 12 13:06:06 2009 +0100
@@ -52,6 +52,8 @@
 
   octave_value squeeze (void) const { return matrix; }
 
+  octave_value full_value (void) const { return to_dense (); }
+
   octave_value subsref (const std::string& type,
 			const std::list<octave_value_list>& idx);
 
--- a/src/ov-range.h	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ov-range.h	Mon Jan 12 13:06:06 2009 +0100
@@ -119,6 +119,8 @@
 
   octave_value squeeze (void) const { return range; }
 
+  octave_value full_value (void) const { return range.matrix_value (); }
+
   bool is_defined (void) const { return true; }
 
   bool is_constant (void) const { return true; }
--- a/src/ov.h	Mon Jan 12 08:42:10 2009 +0100
+++ b/src/ov.h	Mon Jan 12 13:06:06 2009 +0100
@@ -327,6 +327,10 @@
   octave_value squeeze (void) const
     { return rep->squeeze (); }
 
+  // The result of full().
+  octave_value full_value (void) const
+    { return rep->full_value (); }
+
   octave_base_value *try_narrowing_conversion (void)
     { return rep->try_narrowing_conversion (); }