# HG changeset patch # User John W. Eaton # Date 1235018043 18000 # Node ID 20dfb885f877be11f33985e69203bd8fc87e977a # Parent c9e1db15035bec3c76766796db24db0f7ae3c76e int -> octave_idx fixes diff -r c9e1db15035b -r 20dfb885f877 liboctave/CDiagMatrix.cc --- a/liboctave/CDiagMatrix.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/CDiagMatrix.cc Wed Feb 18 23:34:03 2009 -0500 @@ -355,12 +355,12 @@ ComplexDiagMatrix ComplexDiagMatrix::inverse (void) const { - int info; + octave_idx_type info; return inverse (info); } ComplexDiagMatrix -ComplexDiagMatrix::inverse (int& info) const +ComplexDiagMatrix::inverse (octave_idx_type& info) const { octave_idx_type r = rows (); octave_idx_type c = cols (); diff -r c9e1db15035b -r 20dfb885f877 liboctave/CDiagMatrix.h --- a/liboctave/CDiagMatrix.h Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/CDiagMatrix.h Wed Feb 18 23:34:03 2009 -0500 @@ -110,7 +110,7 @@ ComplexColumnVector column (octave_idx_type i) const; ComplexColumnVector column (char *s) const; - ComplexDiagMatrix inverse (int& info) const; + ComplexDiagMatrix inverse (octave_idx_type& info) const; ComplexDiagMatrix inverse (void) const; bool all_elements_are_real (void) const; diff -r c9e1db15035b -r 20dfb885f877 liboctave/ChangeLog --- a/liboctave/ChangeLog Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/ChangeLog Wed Feb 18 23:34:03 2009 -0500 @@ -1,5 +1,24 @@ 2009-02-18 John W. Eaton + * dbleQR.cc (QR::init, QR::form): Cast int to octave_idx_type in + call to std::max. + * floatQR.cc (FloatQR::init, FloatQR::form): Ditto. + * CmplxQR.cc (ComplexQR::init, ComplexQR::form): Ditto. + * fCmplxQR.cc (FloatComplexQR::init, FloatComplexQR::form): Ditto. + + * dbleQRP.cc (QRP::init): Cast int to octave_idx_type in call to + std::max and as operand to -= operator. + * CmplxQRP.cc (ComplexQRP::init): Ditto. + * floatQRP.cc (FloatQRP::init): Ditto. + * fCmplxQRP.cc (FloatComplexQRP::init): Ditto. + + * CDiagMatrix.cc, CDiagMatrix.h (ComplexDiagMatrix::inverse): + Declare info as octave_idx_type, not int. + * dDiagMatrix.cc, dDiagMatrix.h (DiagMatrix::inverse): Ditto. + * fDiagMatrix.cc, fCDiagMatrix.h (FloatDiagMatrix::inverse): Ditto. + * fCDiagMatrix.cc, fCDiagMatrix.h (FloatComplexDiagMatrix::inverse): + Ditto. + * dMatrix.cc (Matrix::determinant): Declare local variables volatile as needed to avoid "maybe clobbered by vfork" warning from GCC. diff -r c9e1db15035b -r 20dfb885f877 liboctave/CmplxQR.cc --- a/liboctave/CmplxQR.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/CmplxQR.cc Wed Feb 18 23:34:03 2009 -0500 @@ -110,7 +110,8 @@ F77_XFCN (zgeqrf, ZGEQRF, (m, n, afact.fortran_vec (), m, tau, &clwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = clwork.real (); lwork = std::max (lwork, 1); + octave_idx_type lwork = clwork.real (); + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (Complex, work, lwork); F77_XFCN (zgeqrf, ZGEQRF, (m, n, afact.fortran_vec (), m, tau, work, lwork, info)); } @@ -177,7 +178,8 @@ &clwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = clwork.real (); lwork = std::max (lwork, 1); + octave_idx_type lwork = clwork.real (); + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (Complex, work, lwork); F77_XFCN (zungqr, ZUNGQR, (m, k, min_mn, q.fortran_vec (), m, tau, work, lwork, info)); diff -r c9e1db15035b -r 20dfb885f877 liboctave/CmplxQRP.cc --- a/liboctave/CmplxQRP.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/CmplxQRP.cc Wed Feb 18 23:34:03 2009 -0500 @@ -77,7 +77,8 @@ tau, &clwork, -1, rwork, info)); // allocate buffer and do the job. - octave_idx_type lwork = clwork.real (); lwork = std::max (lwork, 1); + octave_idx_type lwork = clwork.real (); + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (Complex, work, lwork); F77_XFCN (zgeqp3, ZGEQP3, (m, n, afact.fortran_vec (), m, jpvt.fortran_vec (), tau, work, lwork, rwork, info)); @@ -88,7 +89,7 @@ // Form Permutation matrix (if economy is requested, return the // indices only!) - jpvt -= 1; + jpvt -= static_cast (1); p = PermMatrix (jpvt, true); diff -r c9e1db15035b -r 20dfb885f877 liboctave/dDiagMatrix.cc --- a/liboctave/dDiagMatrix.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/dDiagMatrix.cc Wed Feb 18 23:34:03 2009 -0500 @@ -270,12 +270,12 @@ DiagMatrix DiagMatrix::inverse (void) const { - int info; + octave_idx_type info; return inverse (info); } DiagMatrix -DiagMatrix::inverse (int &info) const +DiagMatrix::inverse (octave_idx_type &info) const { octave_idx_type r = rows (); octave_idx_type c = cols (); diff -r c9e1db15035b -r 20dfb885f877 liboctave/dDiagMatrix.h --- a/liboctave/dDiagMatrix.h Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/dDiagMatrix.h Wed Feb 18 23:34:03 2009 -0500 @@ -93,7 +93,7 @@ ColumnVector column (char *s) const; DiagMatrix inverse (void) const; - DiagMatrix inverse (int& info) const; + DiagMatrix inverse (octave_idx_type& info) const; // other operations diff -r c9e1db15035b -r 20dfb885f877 liboctave/dbleQR.cc --- a/liboctave/dbleQR.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/dbleQR.cc Wed Feb 18 23:34:03 2009 -0500 @@ -108,7 +108,8 @@ F77_XFCN (dgeqrf, DGEQRF, (m, n, afact.fortran_vec (), m, tau, &rlwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = rlwork; lwork = std::max (lwork, 1); + octave_idx_type lwork = rlwork; + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (double, work, lwork); F77_XFCN (dgeqrf, DGEQRF, (m, n, afact.fortran_vec (), m, tau, work, lwork, info)); } @@ -175,7 +176,8 @@ &rlwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = rlwork; lwork = std::max (lwork, 1); + octave_idx_type lwork = rlwork; + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (double, work, lwork); F77_XFCN (dorgqr, DORGQR, (m, k, min_mn, q.fortran_vec (), m, tau, work, lwork, info)); diff -r c9e1db15035b -r 20dfb885f877 liboctave/dbleQRP.cc --- a/liboctave/dbleQRP.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/dbleQRP.cc Wed Feb 18 23:34:03 2009 -0500 @@ -75,7 +75,8 @@ tau, &rlwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = rlwork; lwork = std::max (lwork, 1); + octave_idx_type lwork = rlwork; + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (double, work, lwork); F77_XFCN (dgeqp3, DGEQP3, (m, n, afact.fortran_vec (), m, jpvt.fortran_vec (), tau, work, lwork, info)); @@ -86,7 +87,7 @@ // Form Permutation matrix (if economy is requested, return the // indices only!) - jpvt -= 1; + jpvt -= static_cast (1); p = PermMatrix (jpvt, true); diff -r c9e1db15035b -r 20dfb885f877 liboctave/fCDiagMatrix.cc --- a/liboctave/fCDiagMatrix.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/fCDiagMatrix.cc Wed Feb 18 23:34:03 2009 -0500 @@ -355,12 +355,12 @@ FloatComplexDiagMatrix FloatComplexDiagMatrix::inverse (void) const { - int info; + octave_idx_type info; return inverse (info); } FloatComplexDiagMatrix -FloatComplexDiagMatrix::inverse (int& info) const +FloatComplexDiagMatrix::inverse (octave_idx_type& info) const { octave_idx_type r = rows (); octave_idx_type c = cols (); diff -r c9e1db15035b -r 20dfb885f877 liboctave/fCDiagMatrix.h --- a/liboctave/fCDiagMatrix.h Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/fCDiagMatrix.h Wed Feb 18 23:34:03 2009 -0500 @@ -110,7 +110,7 @@ FloatComplexColumnVector column (octave_idx_type i) const; FloatComplexColumnVector column (char *s) const; - FloatComplexDiagMatrix inverse (int& info) const; + FloatComplexDiagMatrix inverse (octave_idx_type& info) const; FloatComplexDiagMatrix inverse (void) const; bool all_elements_are_real (void) const; diff -r c9e1db15035b -r 20dfb885f877 liboctave/fCmplxQR.cc --- a/liboctave/fCmplxQR.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/fCmplxQR.cc Wed Feb 18 23:34:03 2009 -0500 @@ -110,7 +110,8 @@ F77_XFCN (cgeqrf, CGEQRF, (m, n, afact.fortran_vec (), m, tau, &clwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = clwork.real (); lwork = std::max (lwork, 1); + octave_idx_type lwork = clwork.real (); + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork); F77_XFCN (cgeqrf, CGEQRF, (m, n, afact.fortran_vec (), m, tau, work, lwork, info)); } @@ -177,7 +178,8 @@ &clwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = clwork.real (); lwork = std::max (lwork, 1); + octave_idx_type lwork = clwork.real (); + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork); F77_XFCN (cungqr, CUNGQR, (m, k, min_mn, q.fortran_vec (), m, tau, work, lwork, info)); diff -r c9e1db15035b -r 20dfb885f877 liboctave/fCmplxQRP.cc --- a/liboctave/fCmplxQRP.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/fCmplxQRP.cc Wed Feb 18 23:34:03 2009 -0500 @@ -77,7 +77,8 @@ tau, &clwork, -1, rwork, info)); // allocate buffer and do the job. - octave_idx_type lwork = clwork.real (); lwork = std::max (lwork, 1); + octave_idx_type lwork = clwork.real (); + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork); F77_XFCN (cgeqp3, CGEQP3, (m, n, afact.fortran_vec (), m, jpvt.fortran_vec (), tau, work, lwork, rwork, info)); @@ -88,7 +89,7 @@ // Form Permutation matrix (if economy is requested, return the // indices only!) - jpvt -= 1; + jpvt -= static_cast (1); p = PermMatrix (jpvt, true); diff -r c9e1db15035b -r 20dfb885f877 liboctave/fDiagMatrix.cc --- a/liboctave/fDiagMatrix.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/fDiagMatrix.cc Wed Feb 18 23:34:03 2009 -0500 @@ -270,12 +270,12 @@ FloatDiagMatrix FloatDiagMatrix::inverse (void) const { - int info; + octave_idx_type info; return inverse (info); } FloatDiagMatrix -FloatDiagMatrix::inverse (int &info) const +FloatDiagMatrix::inverse (octave_idx_type &info) const { octave_idx_type r = rows (); octave_idx_type c = cols (); diff -r c9e1db15035b -r 20dfb885f877 liboctave/fDiagMatrix.h --- a/liboctave/fDiagMatrix.h Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/fDiagMatrix.h Wed Feb 18 23:34:03 2009 -0500 @@ -93,7 +93,7 @@ FloatColumnVector column (char *s) const; FloatDiagMatrix inverse (void) const; - FloatDiagMatrix inverse (int& info) const; + FloatDiagMatrix inverse (octave_idx_type& info) const; // other operations diff -r c9e1db15035b -r 20dfb885f877 liboctave/floatQR.cc --- a/liboctave/floatQR.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/floatQR.cc Wed Feb 18 23:34:03 2009 -0500 @@ -108,7 +108,8 @@ F77_XFCN (sgeqrf, SGEQRF, (m, n, afact.fortran_vec (), m, tau, &rlwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = rlwork; lwork = std::max (lwork, 1); + octave_idx_type lwork = rlwork; + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (float, work, lwork); F77_XFCN (sgeqrf, SGEQRF, (m, n, afact.fortran_vec (), m, tau, work, lwork, info)); } @@ -175,7 +176,8 @@ &rlwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = rlwork; lwork = std::max (lwork, 1); + octave_idx_type lwork = rlwork; + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (float, work, lwork); F77_XFCN (sorgqr, SORGQR, (m, k, min_mn, q.fortran_vec (), m, tau, work, lwork, info)); diff -r c9e1db15035b -r 20dfb885f877 liboctave/floatQRP.cc --- a/liboctave/floatQRP.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/liboctave/floatQRP.cc Wed Feb 18 23:34:03 2009 -0500 @@ -75,7 +75,8 @@ tau, &rlwork, -1, info)); // allocate buffer and do the job. - octave_idx_type lwork = rlwork; lwork = std::max (lwork, 1); + octave_idx_type lwork = rlwork; + lwork = std::max (lwork, static_cast (1)); OCTAVE_LOCAL_BUFFER (float, work, lwork); F77_XFCN (sgeqp3, SGEQP3, (m, n, afact.fortran_vec (), m, jpvt.fortran_vec (), tau, work, lwork, info)); @@ -86,7 +87,7 @@ // Form Permutation matrix (if economy is requested, return the // indices only!) - jpvt -= 1; + jpvt -= static_cast (1); p = PermMatrix (jpvt, true); diff -r c9e1db15035b -r 20dfb885f877 src/ChangeLog --- a/src/ChangeLog Wed Feb 18 17:46:07 2009 -0500 +++ b/src/ChangeLog Wed Feb 18 23:34:03 2009 -0500 @@ -1,5 +1,11 @@ 2009-02-18 John W. Eaton - + + * ov.cc (convert_to_octave_idx_type_array): New static function. + (octave_value::octave_idx_type_vector_value): New function. + * ov.h (octave_value::octave_idx_type_vector_value): Provide decl. + * DLD-FUNCTIONS/qr.cc (Fqrdelete, Fqrinsert): Use it to convert + octave_value object to array of octave_idx_type values. + * DLD-FUNCTIONS/find.cc (find_nonzero_elem_idx): Likewise. * DLD-FUNCTIONS/time.cc (strptime): Likewise. * DLD-FUNCTIONS/quad.cc (Fquad): Eliminate unnecessary cast. diff -r c9e1db15035b -r 20dfb885f877 src/DLD-FUNCTIONS/qr.cc --- a/src/DLD-FUNCTIONS/qr.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/src/DLD-FUNCTIONS/qr.cc Wed Feb 18 23:34:03 2009 -0500 @@ -989,7 +989,8 @@ { if (check_index (argj, col)) { - MArray j = argj.int_vector_value (); + MArray j + = argj.octave_idx_type_vector_value (); if (argq.is_real_type () && argr.is_real_type () @@ -1202,7 +1203,8 @@ { if (check_index (argj, col)) { - MArray j = argj.int_vector_value (); + MArray j + = argj.octave_idx_type_vector_value (); if (argq.is_real_type () && argr.is_real_type ()) diff -r c9e1db15035b -r 20dfb885f877 src/ov.cc --- a/src/ov.cc Wed Feb 18 17:46:07 2009 -0500 +++ b/src/ov.cc Wed Feb 18 23:34:03 2009 -0500 @@ -1494,6 +1494,88 @@ type_name (), "integer vector")); } +template +static Array +convert_to_octave_idx_type_array (const Array >& A) +{ + Array retval (A.dims ()); + octave_idx_type n = A.numel (); + + octave_int::clear_conv_flag (); + for (octave_idx_type i = 0; i < n; i++) + retval.xelem (i) = octave_int (A.xelem (i)); + + if (octave_int::get_trunc_flag ()) + gripe_truncated_conversion (octave_int::type_name (), "int"); + + octave_int::clear_conv_flag (); + + return retval; +} + +Array +octave_value::octave_idx_type_vector_value (bool force_string_conv, + bool require_int, + bool force_vector_conversion) const +{ + Array retval; + + if (is_integer_type ()) + { + if (is_int32_type ()) + retval = convert_to_octave_idx_type_array (int32_array_value ()); + else if (is_int64_type ()) + retval = convert_to_octave_idx_type_array (int64_array_value ()); + else if (is_int16_type ()) + retval = convert_to_octave_idx_type_array (int16_array_value ()); + else if (is_int8_type ()) + retval = convert_to_octave_idx_type_array (int8_array_value ()); + else if (is_uint32_type ()) + retval = convert_to_octave_idx_type_array (uint32_array_value ()); + else if (is_uint64_type ()) + retval = convert_to_octave_idx_type_array (uint64_array_value ()); + else if (is_uint16_type ()) + retval = convert_to_octave_idx_type_array (uint16_array_value ()); + else if (is_uint8_type ()) + retval = convert_to_octave_idx_type_array (uint8_array_value ()); + else + retval = array_value (force_string_conv); + } + else + { + const NDArray a = array_value (force_string_conv); + if (! error_state) + { + if (require_int) + { + retval.resize (a.dims ()); + for (octave_idx_type i = 0; i < a.numel (); i++) + { + double ai = a.elem (i); + octave_idx_type v = static_cast (ai); + if (ai == v) + retval.xelem (i) = v; + else + { + error ("conversion to integer value failed"); + break; + } + } + } + else + retval = Array (a); + } + } + + + if (error_state) + return retval; + else + return retval.reshape (make_vector_dims (retval.dims (), + force_vector_conversion, + type_name (), "integer vector")); +} + Array octave_value::complex_vector_value (bool force_string_conv, bool force_vector_conversion) const diff -r c9e1db15035b -r 20dfb885f877 src/ov.h --- a/src/ov.h Wed Feb 18 17:46:07 2009 -0500 +++ b/src/ov.h Wed Feb 18 23:34:03 2009 -0500 @@ -857,6 +857,11 @@ bool frc_str_conv = false, bool frc_vec_conv = false) const; + Array + octave_idx_type_vector_value (bool req_int = false, + bool frc_str_conv = false, + bool frc_vec_conv = false) const; + Array vector_value (bool frc_str_conv = false, bool frc_vec_conv = false) const;