changeset 22951:2e6a327e7903

use F77_INT instead of octave_idx_type for liboctave QRP functions * qrp.cc: Use F77_INT instead of octave_idx_type for integer data passed to Fortran subroutines.
author John W. Eaton <jwe@octave.org>
date Mon, 26 Dec 2016 21:24:32 -0500
parents f2fae9bd5cec
children 7c9492d3b421
files liboctave/numeric/qrp.cc
diffstat 1 files changed, 76 insertions(+), 48 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/numeric/qrp.cc	Mon Dec 26 21:16:01 2016 -0500
+++ b/liboctave/numeric/qrp.cc	Mon Dec 26 21:24:32 2016 -0500
@@ -50,19 +50,19 @@
     {
       assert (qr_type != qr<Matrix>::raw);
 
-      octave_idx_type m = a.rows ();
-      octave_idx_type n = a.cols ();
+      F77_INT m = to_f77_int (a.rows ());
+      F77_INT n = to_f77_int (a.cols ());
 
-      octave_idx_type min_mn = m < n ? m : n;
+      F77_INT min_mn = m < n ? m : n;
       OCTAVE_LOCAL_BUFFER (double, tau, min_mn);
 
-      octave_idx_type info = 0;
+      F77_INT info = 0;
 
       Matrix afact = a;
       if (m > n && qr_type == qr<Matrix>::std)
         afact.resize (m, m);
 
-      MArray<octave_idx_type> jpvt (dim_vector (n, 1), 0);
+      MArray<F77_INT> jpvt (dim_vector (n, 1), 0);
 
       if (m > 0)
         {
@@ -73,20 +73,24 @@
                                      &rlwork, -1, info));
 
           // allocate buffer and do the job.
-          octave_idx_type lwork = rlwork;
-          lwork = std::max (lwork, static_cast<octave_idx_type> (1));
+          F77_INT lwork = static_cast<F77_INT> (rlwork);
+          lwork = std::max (lwork, static_cast<F77_INT> (1));
           OCTAVE_LOCAL_BUFFER (double, work, lwork);
+
           F77_XFCN (dgeqp3, DGEQP3, (m, n, afact.fortran_vec (),
                                      m, jpvt.fortran_vec (), tau,
                                      work, lwork, info));
         }
       else
-        for (octave_idx_type i = 0; i < n; i++) jpvt(i) = i+1;
+        {
+          for (F77_INT i = 0; i < n; i++)
+            jpvt(i) = i+1;
+        }
 
       // Form Permutation matrix (if economy is requested, return the
       // indices only!)
 
-      jpvt -= static_cast<octave_idx_type> (1);
+      jpvt -= static_cast<F77_INT> (1);
       p = PermMatrix (jpvt, true);
 
       form (n, afact, tau, qr_type);
@@ -114,19 +118,19 @@
     {
       assert (qr_type != qr<FloatMatrix>::raw);
 
-      octave_idx_type m = a.rows ();
-      octave_idx_type n = a.cols ();
+      F77_INT m = to_f77_int (a.rows ());
+      F77_INT n = to_f77_int (a.cols ());
 
-      octave_idx_type min_mn = m < n ? m : n;
+      F77_INT min_mn = m < n ? m : n;
       OCTAVE_LOCAL_BUFFER (float, tau, min_mn);
 
-      octave_idx_type info = 0;
+      F77_INT info = 0;
 
       FloatMatrix afact = a;
       if (m > n && qr_type == qr<FloatMatrix>::std)
         afact.resize (m, m);
 
-      MArray<octave_idx_type> jpvt (dim_vector (n, 1), 0);
+      MArray<F77_INT> jpvt (dim_vector (n, 1), 0);
 
       if (m > 0)
         {
@@ -137,20 +141,24 @@
                                      &rlwork, -1, info));
 
           // allocate buffer and do the job.
-          octave_idx_type lwork = rlwork;
-          lwork = std::max (lwork, static_cast<octave_idx_type> (1));
+          F77_INT lwork = static_cast<F77_INT> (rlwork);
+          lwork = std::max (lwork, static_cast<F77_INT> (1));
           OCTAVE_LOCAL_BUFFER (float, work, lwork);
+
           F77_XFCN (sgeqp3, SGEQP3, (m, n, afact.fortran_vec (),
                                      m, jpvt.fortran_vec (), tau,
                                      work, lwork, info));
         }
       else
-        for (octave_idx_type i = 0; i < n; i++) jpvt(i) = i+1;
+        {
+          for (F77_INT i = 0; i < n; i++)
+            jpvt(i) = i+1;
+        }
 
       // Form Permutation matrix (if economy is requested, return the
       // indices only!)
 
-      jpvt -= static_cast<octave_idx_type> (1);
+      jpvt -= static_cast<F77_INT> (1);
       p = PermMatrix (jpvt, true);
 
       form (n, afact, tau, qr_type);
@@ -178,19 +186,19 @@
     {
       assert (qr_type != qr<ComplexMatrix>::raw);
 
-      octave_idx_type m = a.rows ();
-      octave_idx_type n = a.cols ();
+      F77_INT m = to_f77_int (a.rows ());
+      F77_INT n = to_f77_int (a.cols ());
 
-      octave_idx_type min_mn = m < n ? m : n;
+      F77_INT min_mn = m < n ? m : n;
       OCTAVE_LOCAL_BUFFER (Complex, tau, min_mn);
 
-      octave_idx_type info = 0;
+      F77_INT info = 0;
 
       ComplexMatrix afact = a;
       if (m > n && qr_type == qr<ComplexMatrix>::std)
         afact.resize (m, m);
 
-      MArray<octave_idx_type> jpvt (dim_vector (n, 1), 0);
+      MArray<F77_INT> jpvt (dim_vector (n, 1), 0);
 
       if (m > 0)
         {
@@ -198,25 +206,35 @@
 
           // workspace query.
           Complex clwork;
-          F77_XFCN (zgeqp3, ZGEQP3, (m, n, F77_DBLE_CMPLX_ARG (afact.fortran_vec ()),
-                                     m, jpvt.fortran_vec (), F77_DBLE_CMPLX_ARG (tau),
-                                     F77_DBLE_CMPLX_ARG (&clwork), -1, rwork, info));
+          F77_XFCN (zgeqp3, ZGEQP3, (m, n,
+                                     F77_DBLE_CMPLX_ARG (afact.fortran_vec ()),
+                                     m, jpvt.fortran_vec (),
+                                     F77_DBLE_CMPLX_ARG (tau),
+                                     F77_DBLE_CMPLX_ARG (&clwork),
+                                     -1, rwork, info));
 
           // allocate buffer and do the job.
-          octave_idx_type lwork = clwork.real ();
-          lwork = std::max (lwork, static_cast<octave_idx_type> (1));
+          F77_INT lwork = static_cast<F77_INT> (clwork.real ());
+          lwork = std::max (lwork, static_cast<F77_INT> (1));
           OCTAVE_LOCAL_BUFFER (Complex, work, lwork);
-          F77_XFCN (zgeqp3, ZGEQP3, (m, n, F77_DBLE_CMPLX_ARG (afact.fortran_vec ()),
-                                     m, jpvt.fortran_vec (), F77_DBLE_CMPLX_ARG (tau),
-                                     F77_DBLE_CMPLX_ARG (work), lwork, rwork, info));
+
+          F77_XFCN (zgeqp3, ZGEQP3, (m, n,
+                                     F77_DBLE_CMPLX_ARG (afact.fortran_vec ()),
+                                     m, jpvt.fortran_vec (),
+                                     F77_DBLE_CMPLX_ARG (tau),
+                                     F77_DBLE_CMPLX_ARG (work),
+                                     lwork, rwork, info));
         }
       else
-        for (octave_idx_type i = 0; i < n; i++) jpvt(i) = i+1;
+        {
+          for (F77_INT i = 0; i < n; i++)
+            jpvt(i) = i+1;
+        }
 
       // Form Permutation matrix (if economy is requested, return the
       // indices only!)
 
-      jpvt -= static_cast<octave_idx_type> (1);
+      jpvt -= static_cast<F77_INT> (1);
       p = PermMatrix (jpvt, true);
 
       form (n, afact, tau, qr_type);
@@ -244,19 +262,19 @@
     {
       assert (qr_type != qr<FloatComplexMatrix>::raw);
 
-      octave_idx_type m = a.rows ();
-      octave_idx_type n = a.cols ();
+      F77_INT m = to_f77_int (a.rows ());
+      F77_INT n = to_f77_int (a.cols ());
 
-      octave_idx_type min_mn = m < n ? m : n;
+      F77_INT min_mn = m < n ? m : n;
       OCTAVE_LOCAL_BUFFER (FloatComplex, tau, min_mn);
 
-      octave_idx_type info = 0;
+      F77_INT info = 0;
 
       FloatComplexMatrix afact = a;
       if (m > n && qr_type == qr<FloatComplexMatrix>::std)
         afact.resize (m, m);
 
-      MArray<octave_idx_type> jpvt (dim_vector (n, 1), 0);
+      MArray<F77_INT> jpvt (dim_vector (n, 1), 0);
 
       if (m > 0)
         {
@@ -264,25 +282,35 @@
 
           // workspace query.
           FloatComplex clwork;
-          F77_XFCN (cgeqp3, CGEQP3, (m, n, F77_CMPLX_ARG (afact.fortran_vec ()),
-                                     m, jpvt.fortran_vec (), F77_CMPLX_ARG (tau),
-                                     F77_CMPLX_ARG (&clwork), -1, rwork, info));
+          F77_XFCN (cgeqp3, CGEQP3, (m, n,
+                                     F77_CMPLX_ARG (afact.fortran_vec ()),
+                                     m, jpvt.fortran_vec (),
+                                     F77_CMPLX_ARG (tau),
+                                     F77_CMPLX_ARG (&clwork),
+                                     -1, rwork, info));
 
           // allocate buffer and do the job.
-          octave_idx_type lwork = clwork.real ();
-          lwork = std::max (lwork, static_cast<octave_idx_type> (1));
+          F77_INT lwork = static_cast<F77_INT> (clwork.real ());
+          lwork = std::max (lwork, static_cast<F77_INT> (1));
           OCTAVE_LOCAL_BUFFER (FloatComplex, work, lwork);
-          F77_XFCN (cgeqp3, CGEQP3, (m, n, F77_CMPLX_ARG (afact.fortran_vec ()),
-                                     m, jpvt.fortran_vec (), F77_CMPLX_ARG (tau),
-                                     F77_CMPLX_ARG (work), lwork, rwork, info));
+
+          F77_XFCN (cgeqp3, CGEQP3, (m, n,
+                                     F77_CMPLX_ARG (afact.fortran_vec ()),
+                                     m, jpvt.fortran_vec (),
+                                     F77_CMPLX_ARG (tau),
+                                     F77_CMPLX_ARG (work),
+                                     lwork, rwork, info));
         }
       else
-        for (octave_idx_type i = 0; i < n; i++) jpvt(i) = i+1;
+        {
+          for (F77_INT i = 0; i < n; i++)
+            jpvt(i) = i+1;
+        }
 
       // Form Permutation matrix (if economy is requested, return the
       // indices only!)
 
-      jpvt -= static_cast<octave_idx_type> (1);
+      jpvt -= static_cast<F77_INT> (1);
       p = PermMatrix (jpvt, true);
 
       form (n, afact, tau, qr_type);