Mercurial > octave
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) {