changeset 31316:24e45a79bf3c

Avoid function chains in det.cc, inv.cc, pinv.cc, __dsearchn__.cc Remove function chains as identified by grep. Use const auto& tmp as intermediate variables. See https://octave.discourse.group/t/3433 for details.
author Arun Giridhar <arungiridhar@gmail.com>
date Mon, 17 Oct 2022 16:11:02 -0400
parents 5af91eaa0034
children 83e47ccf34ac
files libinterp/corefcn/__dsearchn__.cc libinterp/corefcn/det.cc libinterp/corefcn/inv.cc libinterp/corefcn/pinv.cc
diffstat 4 files changed, 54 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/__dsearchn__.cc	Mon Oct 17 06:24:34 2022 -0400
+++ b/libinterp/corefcn/__dsearchn__.cc	Mon Oct 17 16:11:02 2022 -0400
@@ -46,8 +46,10 @@
   if (args.length () != 2)
     print_usage ();
 
-  Matrix x = args(0).matrix_value ().transpose ();
-  Matrix xi = args(1).matrix_value ().transpose ();
+  const auto& tmp0 = args(0).matrix_value ();
+  const auto& tmp1 = args(1).matrix_value ();
+  Matrix x  = tmp0.transpose ();
+  Matrix xi = tmp1.transpose ();
 
   if (x.rows () != xi.rows () || x.columns () < 1)
     error ("__dsearchn__: number of rows of X and XI must match");
--- a/libinterp/corefcn/det.cc	Mon Oct 17 06:24:34 2022 -0400
+++ b/libinterp/corefcn/det.cc	Mon Oct 17 16:11:02 2022 -0400
@@ -96,30 +96,37 @@
               retval(0) = arg.float_complex_diag_matrix_value ()
                           .determinant ().value ();
               if (nargout > 1)
-                retval(1) = arg.float_complex_diag_matrix_value ().rcond ();
+                {
+                  const auto& tmp = arg.float_complex_diag_matrix_value ();
+                  retval(1) = tmp.rcond ();
+                }
             }
           else
             {
-              retval(0) = arg.complex_diag_matrix_value ()
-                          .determinant ().value ();
+              const auto& tmp1 = arg.complex_diag_matrix_value ();
+              const auto& tmp2 = tmp1.determinant ();
+              retval(0) = tmp2.value ();
               if (nargout > 1)
-                retval(1) = arg.complex_diag_matrix_value ().rcond ();
+                retval(1) = tmp1.rcond ();
             }
         }
       else
         {
           if (isfloat)
             {
-              retval(0) = arg.float_diag_matrix_value ()
-                          .determinant ().value ();
+              const auto& tmp1 = arg.float_diag_matrix_value ();
+              const auto& tmp2 = tmp1.determinant ();
+              retval(0) = tmp2.value ();
               if (nargout > 1)
-                retval(1) = arg.float_diag_matrix_value ().rcond ();
+                retval(1) = tmp1.rcond ();
             }
           else
             {
-              retval(0) = arg.diag_matrix_value ().determinant ().value ();
+              const auto& tmp1 = arg.diag_matrix_value ();
+              const auto& tmp2 = tmp1.determinant ();
+              retval(0) = tmp2.value ();
               if (nargout > 1)
-                retval(1) = arg.diag_matrix_value ().rcond ();
+                retval(1) = tmp1.rcond ();
             }
         }
     }
@@ -128,7 +135,8 @@
       if (nargout <= 1)
         retval.resize (1);
 
-      retval(0) = static_cast<double> (arg.perm_matrix_value ().determinant ());
+      const auto& tmp = arg.perm_matrix_value ();
+      retval(0) = static_cast<double> (tmp.determinant ());
       if (nargout > 1)
         retval(1) = 1.0;
     }
--- a/libinterp/corefcn/inv.cc	Mon Oct 17 06:24:34 2022 -0400
+++ b/libinterp/corefcn/inv.cc	Mon Oct 17 16:11:02 2022 -0400
@@ -93,38 +93,42 @@
         {
           if (isfloat)
             {
-              result = arg.float_complex_diag_matrix_value ().inverse (info);
+              const auto& tmp = arg.float_complex_diag_matrix_value ();
+              result = tmp.inverse (info);
               if (info == -1)
                 frcond = 0.0f;
               else if (nargout > 1)
-                frcond = arg.float_complex_diag_matrix_value ().rcond ();
+                frcond = tmp.rcond ();
             }
           else
             {
-              result = arg.complex_diag_matrix_value ().inverse (info);
+              const auto& tmp = arg.complex_diag_matrix_value ();
+              result = tmp.inverse (info);
               if (info == -1)
                 rcond = 0.0;
               else if (nargout > 1)
-                rcond = arg.complex_diag_matrix_value ().rcond ();
+                rcond = tmp.rcond ();
             }
         }
       else
         {
           if (isfloat)
             {
-              result = arg.float_diag_matrix_value ().inverse (info);
+              const auto& tmp = arg.float_diag_matrix_value ();
+              result = tmp.inverse (info);
               if (info == -1)
                 frcond = 0.0f;
               else if (nargout > 1)
-                frcond = arg.float_diag_matrix_value ().rcond ();
+                frcond = tmp.rcond ();
             }
           else
             {
-              result = arg.diag_matrix_value ().inverse (info);
+              const auto& tmp = arg.diag_matrix_value ();
+              result = tmp.inverse (info);
               if (info == -1)
                 rcond = 0.0;
               else if (nargout > 1)
-                rcond = arg.diag_matrix_value ().rcond ();
+                rcond = tmp.rcond ();
             }
         }
     }
@@ -132,7 +136,8 @@
     {
       info = 0;
       rcond = 1.0;
-      result = arg.perm_matrix_value ().inverse ();
+      const auto& tmp = arg.perm_matrix_value ();
+      result = tmp.inverse ();
     }
   else if (isfloat)
     {
--- a/libinterp/corefcn/pinv.cc	Mon Oct 17 06:24:34 2022 -0400
+++ b/libinterp/corefcn/pinv.cc	Mon Oct 17 16:11:02 2022 -0400
@@ -86,9 +86,15 @@
             error ("pinv: TOL must be greater than zero");
 
           if (arg.isreal ())
-            retval = arg.float_diag_matrix_value ().pseudo_inverse (tol);
+            {
+              const auto& tmp = arg.float_diag_matrix_value ();
+              retval = tmp.pseudo_inverse (tol);
+            }
           else
-            retval = arg.float_complex_diag_matrix_value ().pseudo_inverse (tol);
+            {
+              const auto& tmp = arg.float_complex_diag_matrix_value ();
+              retval = tmp.pseudo_inverse (tol);
+            }
         }
       else
         {
@@ -100,14 +106,21 @@
             error ("pinv: TOL must be greater than zero");
 
           if (arg.isreal ())
-            retval = arg.diag_matrix_value ().pseudo_inverse (tol);
+            {
+              const auto& tmp = arg.diag_matrix_value ();
+              retval = tmp.pseudo_inverse (tol);
+            }
           else
-            retval = arg.complex_diag_matrix_value ().pseudo_inverse (tol);
+            {
+              const auto& tmp = arg.complex_diag_matrix_value ();
+              retval = tmp.pseudo_inverse (tol);
+            }
         }
     }
   else if (arg.is_perm_matrix ())
     {
-      retval = arg.perm_matrix_value ().inverse ();
+      const auto& tmp = arg.perm_matrix_value ();
+      retval = tmp.inverse ();
     }
   else if (isfloat)
     {