Mercurial > hg > octave-terminal
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 +++ b/src/ChangeLog @@ -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 +++ b/src/DLD-FUNCTIONS/sparse.cc @@ -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 +++ b/src/data.cc @@ -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 +++ b/src/ov-base-diag.h @@ -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 +++ b/src/ov-base-mat.h @@ -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 +++ b/src/ov-base-scalar.h @@ -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 +++ b/src/ov-base-sparse.h @@ -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 +++ b/src/ov-base.cc @@ -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 +++ b/src/ov-base.h @@ -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 +++ b/src/ov-perm.h @@ -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 +++ b/src/ov-range.h @@ -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 +++ b/src/ov.h @@ -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 (); }