Mercurial > hg > octave-nkf
diff liboctave/dMatrix.cc @ 7620:36594d5bbe13
Move diag function into the octave_value class
author | David Bateman <dbateman@free.fr> |
---|---|
date | Fri, 21 Mar 2008 00:08:24 +0100 |
parents | f9983d2761df |
children | 45f5faba05a2 |
line wrap: on
line diff
--- a/liboctave/dMatrix.cc +++ b/liboctave/dMatrix.cc @@ -2843,51 +2843,10 @@ return retval; } -ColumnVector -Matrix::diag (void) const -{ - return diag (0); -} - -ColumnVector +Matrix Matrix::diag (octave_idx_type k) const { - octave_idx_type nnr = rows (); - octave_idx_type nnc = cols (); - if (k > 0) - nnc -= k; - else if (k < 0) - nnr += k; - - ColumnVector d; - - if (nnr > 0 && nnc > 0) - { - octave_idx_type ndiag = (nnr < nnc) ? nnr : nnc; - - d.resize (ndiag); - - if (k > 0) - { - for (octave_idx_type i = 0; i < ndiag; i++) - d.elem (i) = elem (i, i+k); - } - else if (k < 0) - { - for (octave_idx_type i = 0; i < ndiag; i++) - d.elem (i) = elem (i-k, i); - } - else - { - for (octave_idx_type i = 0; i < ndiag; i++) - d.elem (i) = elem (i, i); - } - } - else - (*current_liboctave_error_handler) - ("diag: requested diagonal out of range"); - - return d; + return MArray2<double>::diag (k); } ColumnVector