From 7e1b7c81f0848103a089d5d3bc10ea70b0098cd8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Wed, 17 Jul 2024 15:25:50 +0200
Subject: [PATCH] C++20 modernization: use std::ranges::set_intersection

---
 src/ComputingTasks.cc | 11 ++++-------
 src/DynamicModel.cc   |  3 +--
 src/ModFile.cc        |  8 +++-----
 3 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc
index ec26f9b7..e05e9fa2 100644
--- a/src/ComputingTasks.cc
+++ b/src/ComputingTasks.cc
@@ -920,11 +920,9 @@ EstimationStatement::checkPass(ModFileStructure& mod_file_struct, WarningConsoli
   /* Check that we are not trying to estimate a parameter appearing in the
      planner discount factor (see dynare#1173) */
   vector<int> estimated_params_in_planner_discount;
-  set_intersection(mod_file_struct.estimated_parameters.begin(),
-                   mod_file_struct.estimated_parameters.end(),
-                   mod_file_struct.parameters_in_planner_discount.begin(),
-                   mod_file_struct.parameters_in_planner_discount.end(),
-                   back_inserter(estimated_params_in_planner_discount));
+  ranges::set_intersection(mod_file_struct.estimated_parameters,
+                           mod_file_struct.parameters_in_planner_discount,
+                           back_inserter(estimated_params_in_planner_discount));
   if (!estimated_params_in_planner_discount.empty())
     {
       cerr << "ERROR: It is not possible to estimate a parameter ("
@@ -1183,8 +1181,7 @@ AbstractEstimatedParamsStatement::commonCheckPass() const
       it.p4->collectVariables(SymbolType::parameter, used_params);
       it.jscale->collectVariables(SymbolType::parameter, used_params);
       vector<int> intersect;
-      set_intersection(declared_params.begin(), declared_params.end(), used_params.begin(),
-                       used_params.end(), back_inserter(intersect));
+      ranges::set_intersection(declared_params, used_params, back_inserter(intersect));
       if (!intersect.empty())
         {
           cerr << "ERROR: in `" << blockName() << "' block, the value of estimated parameter "
diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 1fd6d5f1..3cd9a0e3 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -3715,8 +3715,7 @@ DynamicModel::checkNoWithLogTransform(const set<int>& eqnumbers)
   const set<int>& with_log_transform = symbol_table.getVariablesWithLogTransform();
 
   vector<int> intersect;
-  set_intersection(endos.begin(), endos.end(), with_log_transform.begin(), with_log_transform.end(),
-                   back_inserter(intersect));
+  ranges::set_intersection(endos, with_log_transform, back_inserter(intersect));
   if (!intersect.empty())
     {
       cerr << "ERROR: the following variables are declared with var(log) and therefore cannot "
diff --git a/src/ModFile.cc b/src/ModFile.cc
index 3c01dbd1..fcc654cb 100644
--- a/src/ModFile.cc
+++ b/src/ModFile.cc
@@ -355,11 +355,9 @@ ModFile::checkPass(bool nostrict, bool stochastic)
   // Test if some estimated parameters are used within the values of shocks
   // statements (see issue #469)
   set<int> parameters_intersect;
-  set_intersection(mod_file_struct.parameters_within_shocks_values.begin(),
-                   mod_file_struct.parameters_within_shocks_values.end(),
-                   mod_file_struct.estimated_parameters.begin(),
-                   mod_file_struct.estimated_parameters.end(),
-                   inserter(parameters_intersect, parameters_intersect.begin()));
+  ranges::set_intersection(mod_file_struct.parameters_within_shocks_values,
+                           mod_file_struct.estimated_parameters,
+                           inserter(parameters_intersect, parameters_intersect.begin()));
   if (parameters_intersect.size() > 0)
     {
       cerr << "ERROR: some estimated parameters (";
-- 
GitLab