From 584da6dab30222b28556a7bf2693634153d62ce3 Mon Sep 17 00:00:00 2001
From: Gennady Pospelov <g.pospelov@fz-juelich.de>
Date: Mon, 18 Dec 2017 15:43:13 +0100
Subject: [PATCH] MinimizerCatalogue gives more access to its content.

---
 Fit/Kernel/MinimizerCatalogue.cpp | 19 ++++++++++++++-----
 Fit/Kernel/MinimizerCatalogue.h   |  4 +++-
 Fit/Minimizer/MinimizerInfo.cpp   |  8 ++++----
 3 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/Fit/Kernel/MinimizerCatalogue.cpp b/Fit/Kernel/MinimizerCatalogue.cpp
index 21dd4e8b5c2..0d5425dec4a 100644
--- a/Fit/Kernel/MinimizerCatalogue.cpp
+++ b/Fit/Kernel/MinimizerCatalogue.cpp
@@ -39,15 +39,24 @@ std::string MinimizerCatalogue::toString() const
     result << boost::format("%-15s|%-65s\n") % "Minimizer" % " Algorithms";
     result << std::string(text_width, '-') << "\n";
 
-    for(MinimizerInfo minimizer : m_minimizers) {
+    for(const auto& ingo : m_minimizers) {
         result << boost::format("%-15s| %-64s\n")
-                  % minimizer.name()
-                  % MinimizerUtils::toString(minimizer.algorithmNames(), std::string(" "));
+                  % ingo.name()
+                  % MinimizerUtils::toString(ingo.algorithmNames(), std::string(" "));
 
     }
     return result.str();
 }
 
+std::vector<std::string> MinimizerCatalogue::minimizerNames() const
+{
+    std::vector<std::string> result;
+    for(const auto& info : m_minimizers)
+        result.push_back(info.name());
+
+    return result;
+}
+
 //! Returns list of algorithms defined for the minimizer with a given name.
 
 std::vector<std::string> MinimizerCatalogue::algorithmNames(const std::string& minimizerName) const
@@ -65,9 +74,9 @@ std::vector<std::string> MinimizerCatalogue::algorithmDescriptions(
 
 //! Returns info for minimizer with given name.
 
-MinimizerInfo MinimizerCatalogue::minimizerInfo(const std::string& minimizerName) const
+const MinimizerInfo& MinimizerCatalogue::minimizerInfo(const std::string& minimizerName) const
 {
-    for(auto info : m_minimizers)
+    for(const auto& info : m_minimizers)
         if(info.name() == minimizerName)
             return info;
 
diff --git a/Fit/Kernel/MinimizerCatalogue.h b/Fit/Kernel/MinimizerCatalogue.h
index 3af2894156e..ec1ed9df733 100644
--- a/Fit/Kernel/MinimizerCatalogue.h
+++ b/Fit/Kernel/MinimizerCatalogue.h
@@ -41,12 +41,14 @@ public:
 
     std::string toString() const;
 
+    std::vector<std::string> minimizerNames() const;
+
     std::vector<std::string> algorithmNames(const std::string& minimizerName) const;
 
     std::vector<std::string> algorithmDescriptions(const std::string& minimizerName) const;
 
+    const MinimizerInfo& minimizerInfo(const std::string& minimizerName) const;
 private:
-    MinimizerInfo minimizerInfo(const std::string& minimizerName) const;
 
     void addMinimizerInfo(const MinimizerInfo& info);
     std::vector<MinimizerInfo> m_minimizers;
diff --git a/Fit/Minimizer/MinimizerInfo.cpp b/Fit/Minimizer/MinimizerInfo.cpp
index 190598d52f1..df6c44f69f7 100644
--- a/Fit/Minimizer/MinimizerInfo.cpp
+++ b/Fit/Minimizer/MinimizerInfo.cpp
@@ -26,7 +26,7 @@ MinimizerInfo::MinimizerInfo(const std::string& minimizerType,
 
 void MinimizerInfo::setAlgorithmName(const std::string& algorithmName)
 {
-    for (const AlgorithmInfo algo : m_algorithms) {
+    for (const AlgorithmInfo& algo : m_algorithms) {
         if(algo.name() == algorithmName) {
             m_current_algorithm = algorithmName;
             return;
@@ -36,7 +36,7 @@ void MinimizerInfo::setAlgorithmName(const std::string& algorithmName)
     std::ostringstream msg;
     msg << "MinimizerInfo::setAlgorithmName() -> Error. Algorithm name '" << algorithmName
         <<"' is not in the list of defined algorithms (";
-    for (const AlgorithmInfo algo : m_algorithms)
+    for (const AlgorithmInfo& algo : m_algorithms)
         msg << algo.name() << " ";
     msg << ")";
     throw std::runtime_error(msg.str());
@@ -52,7 +52,7 @@ std::string MinimizerInfo::algorithmName() const
 std::vector<std::string> MinimizerInfo::algorithmNames() const
 {
     std::vector<std::string> result;
-    for (const AlgorithmInfo algo : m_algorithms)
+    for (const AlgorithmInfo& algo : m_algorithms)
         result.push_back(algo.name());
     return result;
 }
@@ -62,7 +62,7 @@ std::vector<std::string> MinimizerInfo::algorithmNames() const
 std::vector<std::string> MinimizerInfo::algorithmDescriptions() const
 {
     std::vector<std::string> result;
-    for (const AlgorithmInfo algo : m_algorithms)
+    for (const AlgorithmInfo& algo : m_algorithms)
         result.push_back(algo.description());
     return result;
 }
-- 
GitLab