Mercurial > hg > octave-nkf
diff src/ov-flt-cx-diag.cc @ 9812:f80c566bc751
improve unary mapper system
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Thu, 12 Nov 2009 15:47:58 +0100 |
parents | eb63fbe60fab |
children | 57a59eae83cc |
line wrap: on
line diff
--- a/src/ov-flt-cx-diag.cc +++ b/src/ov-flt-cx-diag.cc @@ -120,43 +120,30 @@ } octave_value -octave_float_complex_diag_matrix::abs (void) const -{ - return matrix.abs (); -} - -octave_value -octave_float_complex_diag_matrix::real (void) const +octave_float_complex_diag_matrix::map (unary_mapper_t umap) const { - return ::real (matrix); -} - -octave_value -octave_float_complex_diag_matrix::conj (void) const -{ - return ::conj (matrix); + switch (umap) + { + case umap_abs: + return matrix.abs (); + case umap_real: + return ::real (matrix); + case umap_conj: + return ::conj (matrix); + case umap_imag: + return ::imag (matrix); + case umap_sqrt: + { + FloatComplexColumnVector tmp = matrix.diag ().map<FloatComplex> (std::sqrt); + FloatComplexDiagMatrix retval (tmp); + retval.resize (matrix.rows (), matrix.columns ()); + return retval; + } + default: + return to_dense ().map (umap); + } } -octave_value -octave_float_complex_diag_matrix::imag (void) const -{ - return ::imag (matrix); -} - -octave_value -octave_float_complex_diag_matrix::sqrt (void) const -{ - octave_value retval; - - static FloatComplexNDArray::cmapper csqrt = std::sqrt; - - FloatComplexColumnVector dvec = matrix.diag (); - retval = FloatComplexDiagMatrix (dvec.map (csqrt)); - - retval.resize (dims ()); - - return retval; -} bool octave_float_complex_diag_matrix::save_binary (std::ostream& os,