From b8cd067632281173621d09c17e7115ceab93cc81 Mon Sep 17 00:00:00 2001
From: renchao_lu <renchao.lu@gmail.com>
Date: Sun, 9 Jun 2019 16:45:41 +0200
Subject: [PATCH] [CL] Collect accepted items by item type.

---
 ChemistryLib/CreateOutput.cpp                 | 26 +++++++++----------
 ChemistryLib/PhreeqcIOData/AqueousSolution.h  |  3 +++
 ChemistryLib/PhreeqcIOData/EquilibriumPhase.h |  3 +++
 ChemistryLib/PhreeqcIOData/KineticReactant.h  |  3 +++
 4 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/ChemistryLib/CreateOutput.cpp b/ChemistryLib/CreateOutput.cpp
index 310a2037b74..be4b3c1a2ea 100644
--- a/ChemistryLib/CreateOutput.cpp
+++ b/ChemistryLib/CreateOutput.cpp
@@ -7,7 +7,9 @@
  *
  */
 
+#include <algorithm>
 #include <numeric>
+
 #include "CreateOutput.h"
 
 namespace ChemistryLib
@@ -21,20 +23,16 @@ std::unique_ptr<Output> createOutput(
     // Mark which phreeqc output items will be held.
     std::vector<OutputItem> accepted_items{{"pH", ItemType::pH},
                                            {"pe", ItemType::pe}};
-    for (auto const& component : components)
-    {
-        accepted_items.emplace_back(component.name, ItemType::Component);
-    }
-    for (auto const& equilibrium_phase : equilibrium_phases)
-    {
-        accepted_items.emplace_back(equilibrium_phase.name,
-                                    ItemType::EquilibriumPhase);
-    }
-    for (auto const& kinetic_reactant : kinetic_reactants)
-    {
-        accepted_items.emplace_back(kinetic_reactant.name,
-                                    ItemType::KineticReactant);
-    }
+
+    auto accepted_item = [](auto const& item) {
+        return OutputItem(item.name, item.item_type);
+    };
+    std::transform(components.begin(), components.end(),
+                   std::back_inserter(accepted_items), accepted_item);
+    std::transform(equilibrium_phases.begin(), equilibrium_phases.end(),
+                   std::back_inserter(accepted_items), accepted_item);
+    std::transform(kinetic_reactants.begin(), kinetic_reactants.end(),
+                   std::back_inserter(accepted_items), accepted_item);
 
     // Record ids of which phreeqc output items will be dropped.
     BasicOutputSetups basic_output_setups(project_file_name);
diff --git a/ChemistryLib/PhreeqcIOData/AqueousSolution.h b/ChemistryLib/PhreeqcIOData/AqueousSolution.h
index 42844d77a7e..648bbc6972e 100644
--- a/ChemistryLib/PhreeqcIOData/AqueousSolution.h
+++ b/ChemistryLib/PhreeqcIOData/AqueousSolution.h
@@ -13,6 +13,8 @@
 #include <string>
 #include <vector>
 
+#include "ChemistryLib/Output.h"
+
 namespace ChemistryLib
 {
 struct Component
@@ -21,6 +23,7 @@ struct Component
 
     std::string const name;
     double amount;
+    static const ItemType item_type = ItemType::Component;
 };
 
 enum class MeansOfAdjustingCharge
diff --git a/ChemistryLib/PhreeqcIOData/EquilibriumPhase.h b/ChemistryLib/PhreeqcIOData/EquilibriumPhase.h
index 21a2d206e8c..b6eb94408aa 100644
--- a/ChemistryLib/PhreeqcIOData/EquilibriumPhase.h
+++ b/ChemistryLib/PhreeqcIOData/EquilibriumPhase.h
@@ -13,6 +13,8 @@
 #include <string>
 #include <vector>
 
+#include "ChemistryLib/Output.h"
+
 namespace BaseLib
 {
 class ConfigTree;
@@ -38,5 +40,6 @@ struct EquilibriumPhase
     std::string const name;
     double amount;
     double const saturation_index;
+    static const ItemType item_type = ItemType::EquilibriumPhase;
 };
 }  // namespace ChemistryLib
diff --git a/ChemistryLib/PhreeqcIOData/KineticReactant.h b/ChemistryLib/PhreeqcIOData/KineticReactant.h
index 0c51aa50a50..5fd9418d8e7 100644
--- a/ChemistryLib/PhreeqcIOData/KineticReactant.h
+++ b/ChemistryLib/PhreeqcIOData/KineticReactant.h
@@ -14,6 +14,8 @@
 #include <string>
 #include <vector>
 
+#include "ChemistryLib/Output.h"
+
 namespace ChemistryLib
 {
 struct KineticReactant
@@ -36,5 +38,6 @@ struct KineticReactant
     std::string const name;
     double amount;
     std::vector<double> const parameters;
+    static const ItemType item_type = ItemType::KineticReactant;
 };
 }  // namespace ChemistryLib
-- 
GitLab