From d3f15842fb9346df25f6a5c7fff62e1cd59b9d18 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Wed, 20 Nov 2024 16:04:57 +0100
Subject: [PATCH] libkorder, k_order_welfare: avoid unnecessary copies in
 pass-by-value

Automatically detected by clang-tidy using performance-unnecessary-value-param
check.
---
 mex/sources/k_order_welfare/objective_m.cc      |  5 +++--
 mex/sources/k_order_welfare/objective_m.hh      |  2 +-
 mex/sources/libkorder/dynamic_abstract_class.hh |  5 +++--
 mex/sources/libkorder/dynamic_dll.cc            |  4 ++--
 mex/sources/libkorder/dynamic_dll.hh            |  2 +-
 mex/sources/libkorder/dynamic_m.cc              | 12 +++++++-----
 mex/sources/libkorder/dynamic_m.hh              |  2 +-
 7 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/mex/sources/k_order_welfare/objective_m.cc b/mex/sources/k_order_welfare/objective_m.cc
index 8d6709e561..4788462d14 100644
--- a/mex/sources/k_order_welfare/objective_m.cc
+++ b/mex/sources/k_order_welfare/objective_m.cc
@@ -21,6 +21,7 @@
 #include <array>
 #include <cassert>
 #include <type_traits>
+#include <utility>
 
 #include "dynare_exception.hh"
 
@@ -30,13 +31,13 @@ ObjectiveMFile::ObjectiveMFile(const std::string& modName, int kOrder_arg,
                                const mxArray* objective_g1_sparse_rowval_mx_arg,
                                const mxArray* objective_g1_sparse_colval_mx_arg,
                                const mxArray* objective_g1_sparse_colptr_mx_arg,
-                               const std::vector<const mxArray*> objective_gN_sparse_indices_arg) :
+                               std::vector<const mxArray*> objective_gN_sparse_indices_arg) :
     ObjectiveMFilename {modName + ".objective.sparse.static"},
     kOrder {kOrder_arg},
     objective_g1_sparse_rowval_mx {objective_g1_sparse_rowval_mx_arg},
     objective_g1_sparse_colval_mx {objective_g1_sparse_colval_mx_arg},
     objective_g1_sparse_colptr_mx {objective_g1_sparse_colptr_mx_arg},
-    objective_gN_sparse_indices {objective_gN_sparse_indices_arg}
+    objective_gN_sparse_indices {move(objective_gN_sparse_indices_arg)}
 {
 }
 
diff --git a/mex/sources/k_order_welfare/objective_m.hh b/mex/sources/k_order_welfare/objective_m.hh
index d720f910b2..1fc1500545 100644
--- a/mex/sources/k_order_welfare/objective_m.hh
+++ b/mex/sources/k_order_welfare/objective_m.hh
@@ -44,7 +44,7 @@ public:
                  const mxArray* objective_g1_sparse_rowval_mx_arg,
                  const mxArray* objective_g1_sparse_colval_mx_arg,
                  const mxArray* objective_g1_sparse_colptr_mx_arg,
-                 const std::vector<const mxArray*> objective_gN_sparse_indices_arg);
+                 std::vector<const mxArray*> objective_gN_sparse_indices_arg);
   void eval(const Vector& y, const Vector& x, const Vector& params, Vector& residual,
             const std::vector<int>& dynToDynpp, TensorContainer<FSSparseTensor>& derivatives) const
       noexcept(false);
diff --git a/mex/sources/libkorder/dynamic_abstract_class.hh b/mex/sources/libkorder/dynamic_abstract_class.hh
index 1a1aa9a175..5f82c1810d 100644
--- a/mex/sources/libkorder/dynamic_abstract_class.hh
+++ b/mex/sources/libkorder/dynamic_abstract_class.hh
@@ -20,6 +20,7 @@
 #ifndef DYNAMIC_ABSTRACT_CLASS_HH
 #define DYNAMIC_ABSTRACT_CLASS_HH
 
+#include <utility>
 #include <vector>
 
 #include "dynmex.h"
@@ -41,12 +42,12 @@ public:
   DynamicModelAC(int order_arg, const mxArray* dynamic_g1_sparse_rowval_mx_arg,
                  const mxArray* dynamic_g1_sparse_colval_mx_arg,
                  const mxArray* dynamic_g1_sparse_colptr_mx_arg,
-                 const std::vector<const mxArray*> dynamic_gN_sparse_indices_arg) :
+                 std::vector<const mxArray*> dynamic_gN_sparse_indices_arg) :
       order {order_arg},
       dynamic_g1_sparse_rowval_mx {dynamic_g1_sparse_rowval_mx_arg},
       dynamic_g1_sparse_colval_mx {dynamic_g1_sparse_colval_mx_arg},
       dynamic_g1_sparse_colptr_mx {dynamic_g1_sparse_colptr_mx_arg},
-      dynamic_gN_sparse_indices {dynamic_gN_sparse_indices_arg} {};
+      dynamic_gN_sparse_indices {move(dynamic_gN_sparse_indices_arg)} {};
   virtual ~DynamicModelAC() = default;
   virtual void eval(const Vector& y, const Vector& x, const Vector& params, const Vector& ySteady,
                     Vector& residual, const std::map<int, int>& dynToDynpp,
diff --git a/mex/sources/libkorder/dynamic_dll.cc b/mex/sources/libkorder/dynamic_dll.cc
index a50116d07d..b5317d3d75 100644
--- a/mex/sources/libkorder/dynamic_dll.cc
+++ b/mex/sources/libkorder/dynamic_dll.cc
@@ -26,10 +26,10 @@ DynamicModelDLL::DynamicModelDLL(const std::string& modName, int order_arg,
                                  const mxArray* dynamic_g1_sparse_rowval_mx_arg,
                                  const mxArray* dynamic_g1_sparse_colval_mx_arg,
                                  const mxArray* dynamic_g1_sparse_colptr_mx_arg,
-                                 const std::vector<const mxArray*> dynamic_gN_sparse_indices_arg,
+                                 std::vector<const mxArray*> dynamic_gN_sparse_indices_arg,
                                  int ntt) :
     DynamicModelAC {order_arg, dynamic_g1_sparse_rowval_mx_arg, dynamic_g1_sparse_colval_mx_arg,
-                    dynamic_g1_sparse_colptr_mx_arg, dynamic_gN_sparse_indices_arg},
+                    dynamic_g1_sparse_colptr_mx_arg, move(dynamic_gN_sparse_indices_arg)},
     dynamic_fcts(order + 1),
     dynamic_fcts_tt(order + 1),
     tt_tmp(ntt),
diff --git a/mex/sources/libkorder/dynamic_dll.hh b/mex/sources/libkorder/dynamic_dll.hh
index 9f3f365171..2a17029019 100644
--- a/mex/sources/libkorder/dynamic_dll.hh
+++ b/mex/sources/libkorder/dynamic_dll.hh
@@ -68,7 +68,7 @@ public:
                   const mxArray* dynamic_g1_sparse_rowval_mx_arg,
                   const mxArray* dynamic_g1_sparse_colval_mx_arg,
                   const mxArray* dynamic_g1_sparse_colptr_mx_arg,
-                  const std::vector<const mxArray*> dynamic_gN_sparse_indices_arg, int ntt);
+                  std::vector<const mxArray*> dynamic_gN_sparse_indices_arg, int ntt);
   ~DynamicModelDLL() override;
 
   void eval(const Vector& y, const Vector& x, const Vector& params, const Vector& ySteady,
diff --git a/mex/sources/libkorder/dynamic_m.cc b/mex/sources/libkorder/dynamic_m.cc
index 4cafa3c36b..adafd2f20e 100644
--- a/mex/sources/libkorder/dynamic_m.cc
+++ b/mex/sources/libkorder/dynamic_m.cc
@@ -21,17 +21,19 @@
 #include <array>
 #include <cassert>
 #include <type_traits>
+#include <utility>
 
 #include "dynare_exception.hh"
 
 #include "dynamic_m.hh"
 
-DynamicModelMFile::DynamicModelMFile(
-    const std::string& modName, int order_arg, const mxArray* dynamic_g1_sparse_rowval_mx_arg,
-    const mxArray* dynamic_g1_sparse_colval_mx_arg, const mxArray* dynamic_g1_sparse_colptr_mx_arg,
-    const std::vector<const mxArray*> dynamic_gN_sparse_indices_arg) :
+DynamicModelMFile::DynamicModelMFile(const std::string& modName, int order_arg,
+                                     const mxArray* dynamic_g1_sparse_rowval_mx_arg,
+                                     const mxArray* dynamic_g1_sparse_colval_mx_arg,
+                                     const mxArray* dynamic_g1_sparse_colptr_mx_arg,
+                                     std::vector<const mxArray*> dynamic_gN_sparse_indices_arg) :
     DynamicModelAC {order_arg, dynamic_g1_sparse_rowval_mx_arg, dynamic_g1_sparse_colval_mx_arg,
-                    dynamic_g1_sparse_colptr_mx_arg, dynamic_gN_sparse_indices_arg},
+                    dynamic_g1_sparse_colptr_mx_arg, move(dynamic_gN_sparse_indices_arg)},
     DynamicMFilename {modName + ".sparse.dynamic"}
 {
 }
diff --git a/mex/sources/libkorder/dynamic_m.hh b/mex/sources/libkorder/dynamic_m.hh
index 1e00eecdd5..46bdd3bfe7 100644
--- a/mex/sources/libkorder/dynamic_m.hh
+++ b/mex/sources/libkorder/dynamic_m.hh
@@ -41,7 +41,7 @@ public:
                     const mxArray* dynamic_g1_sparse_rowval_mx_arg,
                     const mxArray* dynamic_g1_sparse_colval_mx_arg,
                     const mxArray* dynamic_g1_sparse_colptr_mx_arg,
-                    const std::vector<const mxArray*> dynamic_gN_sparse_indices_arg);
+                    std::vector<const mxArray*> dynamic_gN_sparse_indices_arg);
   void eval(const Vector& y, const Vector& x, const Vector& params, const Vector& ySteady,
             Vector& residual, const std::map<int, int>& dynToDynpp,
             TensorContainer<FSSparseTensor>& derivatives) noexcept(false) override;
-- 
GitLab