# HG changeset patch # User jwe # Date 1165616104 0 # Node ID 4685a6a76229756f7330024d8f307313c6823cb1 # Parent 0a259ae4375e0569d7d92ec8ff72ce3618c1898e [project @ 2006-12-08 22:15:03 by jwe] diff -r 0a259ae4375e -r 4685a6a76229 src/ChangeLog --- a/src/ChangeLog Fri Dec 08 22:05:59 2006 +0000 +++ b/src/ChangeLog Fri Dec 08 22:15:04 2006 +0000 @@ -1,3 +1,21 @@ +2006-12-08 John W. Eaton + + * ov-intx.h (OCTAVE_VALUE_INT_MATRIX_T::array_value, + OCTAVE_VALUE_INT_MATRIX_T::complex_array_value, + OCTAVE_VALUE_INT_MATRIX_T::bool_array_value, + OCTAVE_VALUE_INT_MATRIX_T::char_array_value): + Use fortran_vec to avoid expensive indexing operator. + +2006-12-08 David Bateman + + * ov-intx.h (OCTAVE_VALUE_INT_SCALAR_T::matrix_value, + OCTAVE_VALUE_INT_SCALAR_T::complex_matrix_value, + OCTAVE_VALUE_INT_MATRIX_T::matrix_value, + OCTAVE_VALUE_INT_MATRIX_T::comlex_matrix_value): New functions. + (OCTAVE_VALUE_INT_MATRIX_T::array_value, + OCTAVE_VALUE_INT_MATRIX_T::comlex_array_value): + Use octave_idx_type instead of int for indexing. + 2006-12-04 David Bateman * xpow.cc (xpow (const Matrix&, double)): Add matrix type probing diff -r 0a259ae4375e -r 4685a6a76229 src/ov-intx.h --- a/src/ov-intx.h Fri Dec 08 22:05:59 2006 +0000 +++ b/src/ov-intx.h Fri Dec 08 22:15:04 2006 +0000 @@ -105,13 +105,50 @@ double scalar_value (bool = false) const { return double_value (); } + Matrix + matrix_value (bool = false) const + { + Matrix retval; + dim_vector dv = dims (); + if (dv.length () > 2) + error ("invalid conversion of %s to Matrix", type_name().c_str ()); + else + { + retval = Matrix (dv(0), dv(1)); + double *vec = retval.fortran_vec (); + octave_idx_type nel = matrix.numel (); + for (octave_idx_type i = 0; i < nel; i++) + vec[i] = double (matrix(i)); + } + return retval; + } + + ComplexMatrix + complex_matrix_value (bool = false) const + { + ComplexMatrix retval; + dim_vector dv = dims(); + if (dv.length () > 2) + error ("invalid conversion of %s to Matrix", type_name().c_str ()); + else + { + retval = ComplexMatrix (dv(0), dv(1)); + Complex *vec = retval.fortran_vec (); + octave_idx_type nel = matrix.numel (); + for (octave_idx_type i = 0; i < nel; i++) + vec[i] = Complex (double (matrix(i))); + } + return retval; + } + NDArray array_value (bool = false) const { NDArray retval (matrix.dims ()); - int nel = matrix.numel (); - for (int i = 0; i < nel; i++) - retval(i) = double (matrix(i)); + double *vec = retval.fortran_vec (); + octave_idx_type nel = matrix.numel (); + for (octave_idx_type i = 0; i < nel; i++) + vec[i] = double (matrix(i)); return retval; } @@ -119,9 +156,10 @@ complex_array_value (bool = false) const { ComplexNDArray retval (matrix.dims ()); - int nel = matrix.numel (); - for (int i = 0; i < nel; i++) - retval(i) = Complex (double (matrix(i))); + Complex *vec = retval.fortran_vec (); + octave_idx_type nel = matrix.numel (); + for (octave_idx_type i = 0; i < nel; i++) + vec[i] = Complex (double (matrix(i))); return retval; } @@ -135,8 +173,9 @@ if (warn && matrix.any_element_not_one_or_zero ()) gripe_logical_conversion (); + bool *vec = retval.fortran_vec (); for (octave_idx_type i = 0; i < nel; i++) - retval(i) = static_cast(matrix(i)); + vec[i] = static_cast (matrix(i)); return retval; } @@ -148,8 +187,9 @@ octave_idx_type nel = numel (); + char *vec = retval.fortran_vec (); for (octave_idx_type i = 0; i < nel; i++) - retval(i) = static_cast(matrix(i)); + vec[i] = static_cast (matrix(i)); return retval; } @@ -317,6 +357,24 @@ double scalar_value (bool = false) const { return double (scalar); } + + Matrix + matrix_value (bool = false) const + { + Matrix retval (1, 1); + retval(0,0) = double (scalar); + return retval; + } + + ComplexMatrix + complex_matrix_value (bool = false) const + { + ComplexMatrix retval (1, 1); + retval(0,0) = Complex (double (scalar)); + return retval; + } + + NDArray array_value (bool = false) const { @@ -341,7 +399,7 @@ if (warn && scalar != 0.0 && scalar != 1.0) gripe_logical_conversion (); - retval(0) = static_cast(scalar); + retval(0) = static_cast (scalar); return retval; } @@ -350,7 +408,7 @@ char_array_value (bool = false) const { charNDArray retval (dim_vector (1, 1)); - retval(0) = static_cast(scalar); + retval(0) = static_cast (scalar); return retval; }