From 44dc66869abdb060b714b3c9c862a1ddae70dc4f Mon Sep 17 00:00:00 2001
From: Fabian Paus <fabian.paus@kit.edu>
Date: Mon, 5 Jul 2021 17:13:10 +0200
Subject: [PATCH] Remove heavy include from common header file

---
 .../armem/client/MemoryNameSystem.cpp         |   1 +
 .../tree_visitors/TreeTypedDataVisitor.h      |   2 +
 .../codegenerator/typeReader/xml/Data.cpp     |  94 +++++++++++++++
 .../core/codegenerator/typeReader/xml/Data.h  | 114 +++++-------------
 .../core/navigator/data/container/Dict.cpp    |   2 +
 .../aron/core/navigator/type/Navigator.h      |   2 +-
 .../core/navigator/type/container/Object.cpp  |   5 +-
 .../core/navigator/type/container/Tuple.cpp   |   1 +
 .../type/ndarray/EigenQuaternion.cpp          |   2 +
 9 files changed, 133 insertions(+), 90 deletions(-)

diff --git a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp
index 2478cba21..4395b55fd 100644
--- a/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp
+++ b/source/RobotAPI/libraries/armem/client/MemoryNameSystem.cpp
@@ -7,6 +7,7 @@
 #include <RobotAPI/libraries/armem/client/Reader.h>
 #include <RobotAPI/libraries/armem/client/Writer.h>
 
+#include <SimoxUtility/algorithm/string/string_tools.h>
 
 namespace armarx::armem::client
 {
diff --git a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.h b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.h
index fb1c1baa5..49885f7eb 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.h
+++ b/source/RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeTypedDataVisitor.h
@@ -13,6 +13,8 @@
 
 #include <RobotAPI/libraries/armem_gui/instance/tree_visitors/TreeDataVisitorBase.h>
 
+#include <SimoxUtility/algorithm/string/string_tools.h>
+
 
 namespace armarx::armem::gui::instance
 {
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.cpp b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.cpp
index 9a2b8a18a..a593bad8c 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.cpp
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.cpp
@@ -22,3 +22,97 @@
  */
 
 #include "Data.h"
+
+#include <ArmarXCore/core/rapidxml/wrapper/RapidXmlReader.h>
+
+#include <SimoxUtility/algorithm/string/string_tools.h>
+
+namespace armarx::aron::xmltypereader
+{
+
+    void Data::EnforceAttribute(const RapidXmlReaderNode& node, const std::string& att)
+    {
+        if (!HasAttribute(node, att))
+        {
+            throw error::StringNotValidException("XMLReaderData", "EnforceAttribute", "A <" + node.name() + ">-tag does not have the correct attribute", att);
+        }
+    }
+
+    bool Data::HasAttribute(const RapidXmlReaderNode& node, const std::string& att)
+    {
+        return node.has_attribute(att.c_str());
+    }
+
+    std::string Data::GetAttribute(const RapidXmlReaderNode& node, const std::string& att)
+    {
+        EnforceAttribute(node, att);
+        return node.attribute_value(att.c_str());
+    }
+
+    std::string Data::GetAttributeWithDefault(const armarx::RapidXmlReaderNode& node, const std::string& att, const std::string def)
+    {
+        if (!(HasAttribute(node, att)))
+        {
+            return def;
+        }
+        return node.attribute_value(att.c_str());
+    }
+
+    bool Data::AttributeIsTrue(const armarx::RapidXmlReaderNode& node, const std::string& att)
+    {
+        if (HasAttribute(node, att))
+        {
+            std::string v = simox::alg::to_lower(node.attribute_value(att.c_str()));
+            if (v == "1" or v == "true" or v == "wahr" or v == "yes" or v == "ja" or v == "")
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    bool Data::HasTagName(const armarx::RapidXmlReaderNode& node, const std::string& name)
+    {
+        return (simox::alg::to_lower(name) == simox::alg::to_lower(node.name()));
+    }
+
+    void Data::EnforceTagName(const armarx::RapidXmlReaderNode& node, const std::string& name)
+    {
+        if (!(HasTagName(node, name)))
+        {
+            throw error::StringNotValidException("XMLReaderData", "EnforceTagName", "The node <" + node.name() + "> has the wrong tag", name);
+        }
+    }
+
+    std::string Data::GetTagName(const armarx::RapidXmlReaderNode& node)
+    {
+        return simox::alg::to_lower(node.name());
+    }
+
+    bool Data::CheckMinChildSize(const armarx::RapidXmlReaderNode& node, const size_t size)
+    {
+        std::vector<RapidXmlReaderNode> children = node.nodes();
+        return children.size() >= size;
+    }
+
+    bool Data::CheckMaxChildSize(const armarx::RapidXmlReaderNode& node, const size_t size)
+    {
+        std::vector<RapidXmlReaderNode> children = node.nodes();
+        return children.size() <= size;
+    }
+
+    bool Data::CheckExactChildSize(const armarx::RapidXmlReaderNode& node, const size_t size)
+    {
+        std::vector<RapidXmlReaderNode> children = node.nodes();
+        return children.size() == size;
+    }
+
+    void Data::EnforceChildSize(const armarx::RapidXmlReaderNode& node, const size_t size)
+    {
+        if (!Data::CheckExactChildSize(node, size))
+        {
+            throw error::SizeNotValidException("XMLReaderData", "EnforceChildSize", "The node <" + node.name() + "> has the wrong number of children", node.nodes().size(), size);
+        }
+    }
+
+}
diff --git a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h
index 852bf2bbd..4950d51f7 100644
--- a/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h
+++ b/source/RobotAPI/libraries/aron/core/codegenerator/typeReader/xml/Data.h
@@ -28,12 +28,13 @@
 #include <map>
 
 // ArmarX
-#include <ArmarXCore/core/rapidxml/wrapper/RapidXmlReader.h>
-
 #include <RobotAPI/libraries/aron/core/Concepts.h>
-
 #include <RobotAPI/libraries/aron/core/navigator/type/AllNavigators.h>
 
+namespace armarx
+{
+    class RapidXmlReaderNode;
+}
 
 namespace armarx::aron::xmltypereader
 {
@@ -89,89 +90,28 @@ namespace armarx::aron::xmltypereader
         HANDLE_ALL_ARON_TYPES
 #undef RUN_ARON_MACRO
 
-        static void EnforceAttribute(const RapidXmlReaderNode& node, const std::string& att)
-        {
-            if (!HasAttribute(node, att))
-            {
-                throw error::StringNotValidException("XMLReaderData", "EnforceAttribute", "A <" + node.name() + ">-tag does not have the correct attribute", att);
-            }
-        }
-
-        static bool HasAttribute(const RapidXmlReaderNode& node, const std::string& att)
-        {
-            return node.has_attribute(att.c_str());
-        }
-
-        static std::string GetAttribute(const RapidXmlReaderNode& node, const std::string& att)
-        {
-            EnforceAttribute(node, att);
-            return node.attribute_value(att.c_str());
-        }
-
-        static std::string GetAttributeWithDefault(const RapidXmlReaderNode& node, const std::string& att, const std::string def)
-        {
-            if (!(HasAttribute(node, att)))
-            {
-                return def;
-            }
-            return node.attribute_value(att.c_str());
-        }
-
-        static bool AttributeIsTrue(const RapidXmlReaderNode& node, const std::string& att)
-        {
-            if (HasAttribute(node, att))
-            {
-                std::string v = simox::alg::to_lower(node.attribute_value(att.c_str()));
-                if (v == "1" or v == "true" or v == "wahr" or v == "yes" or v == "ja" or v == "")
-                {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        static bool HasTagName(const RapidXmlReaderNode& node, const std::string& name)
-        {
-            return (simox::alg::to_lower(name) == simox::alg::to_lower(node.name()));
-        }
-
-        static void EnforceTagName(const RapidXmlReaderNode& node, const std::string& name)
-        {
-            if (!(HasTagName(node, name)))
-            {
-                throw error::StringNotValidException("XMLReaderData", "EnforceTagName", "The node <" + node.name() + "> has the wrong tag", name);
-            }
-        }
-
-        static std::string GetTagName(const RapidXmlReaderNode& node)
-        {
-            return simox::alg::to_lower(node.name());
-        }
-
-        static bool CheckMinChildSize(const RapidXmlReaderNode& node, const size_t size)
-        {
-            std::vector<RapidXmlReaderNode> children = node.nodes();
-            return children.size() >= size;
-        }
-
-        static bool CheckMaxChildSize(const RapidXmlReaderNode& node, const size_t size)
-        {
-            std::vector<RapidXmlReaderNode> children = node.nodes();
-            return children.size() <= size;
-        }
-
-        static bool CheckExactChildSize(const RapidXmlReaderNode& node, const size_t size)
-        {
-            std::vector<RapidXmlReaderNode> children = node.nodes();
-            return children.size() == size;
-        }
-
-        static void EnforceChildSize(const RapidXmlReaderNode& node, const size_t size)
-        {
-            if (!Data::CheckExactChildSize(node, size))
-            {
-                throw error::SizeNotValidException("XMLReaderData", "EnforceChildSize", "The node <" + node.name() + "> has the wrong number of children", node.nodes().size(), size);
-            }
-        }
+        static void EnforceAttribute(const RapidXmlReaderNode& node, const std::string& att);
+
+        static bool HasAttribute(const RapidXmlReaderNode& node, const std::string& att);
+
+        static std::string GetAttribute(const RapidXmlReaderNode& node, const std::string& att);
+
+        static std::string GetAttributeWithDefault(const RapidXmlReaderNode& node, const std::string& att, const std::string def);
+
+        static bool AttributeIsTrue(const RapidXmlReaderNode& node, const std::string& att);
+
+        static bool HasTagName(const RapidXmlReaderNode& node, const std::string& name);
+
+        static void EnforceTagName(const RapidXmlReaderNode& node, const std::string& name);
+
+        static std::string GetTagName(const RapidXmlReaderNode& node);
+
+        static bool CheckMinChildSize(const RapidXmlReaderNode& node, const size_t size);
+
+        static bool CheckMaxChildSize(const RapidXmlReaderNode& node, const size_t size);
+
+        static bool CheckExactChildSize(const RapidXmlReaderNode& node, const size_t size);
+
+        static void EnforceChildSize(const RapidXmlReaderNode& node, const size_t size);
     };
 }
diff --git a/source/RobotAPI/libraries/aron/core/navigator/data/container/Dict.cpp b/source/RobotAPI/libraries/aron/core/navigator/data/container/Dict.cpp
index ef42b1cca..db8b7a02f 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/data/container/Dict.cpp
+++ b/source/RobotAPI/libraries/aron/core/navigator/data/container/Dict.cpp
@@ -29,6 +29,8 @@
 #include <RobotAPI/libraries/aron/core/navigator/type/container/Dict.h>
 #include <RobotAPI/libraries/aron/core/navigator/type/container/Object.h>
 
+#include <SimoxUtility/algorithm/string/string_conversion.h>
+
 namespace armarx::aron::datanavigator
 {
 
diff --git a/source/RobotAPI/libraries/aron/core/navigator/type/Navigator.h b/source/RobotAPI/libraries/aron/core/navigator/type/Navigator.h
index 3a6cc964a..1ca45844d 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/type/Navigator.h
+++ b/source/RobotAPI/libraries/aron/core/navigator/type/Navigator.h
@@ -30,7 +30,7 @@
 #include <string>
 
 // Simox
-#include <SimoxUtility/algorithm/string.h>
+// #include <SimoxUtility/algorithm/string.h>
 
 // ArmarX
 #include <RobotAPI/libraries/aron/core/Exception.h>
diff --git a/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.cpp b/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.cpp
index 269ec6e20..410ecaedd 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.cpp
+++ b/source/RobotAPI/libraries/aron/core/navigator/type/container/Object.cpp
@@ -24,8 +24,9 @@
 // Header
 #include "Object.h"
 
-// ArmarX
-#include "SimoxUtility/algorithm/get_map_keys_values.h"
+
+#include <SimoxUtility/algorithm/get_map_keys_values.h>
+#include <SimoxUtility/algorithm/string/string_conversion.h>
 
 
 namespace armarx::aron::typenavigator
diff --git a/source/RobotAPI/libraries/aron/core/navigator/type/container/Tuple.cpp b/source/RobotAPI/libraries/aron/core/navigator/type/container/Tuple.cpp
index 4fed86ff9..bded16377 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/type/container/Tuple.cpp
+++ b/source/RobotAPI/libraries/aron/core/navigator/type/container/Tuple.cpp
@@ -24,6 +24,7 @@
 // Header
 #include "Tuple.h"
 
+#include <SimoxUtility/algorithm/string/string_conversion.h>
 
 namespace armarx::aron::typenavigator
 {
diff --git a/source/RobotAPI/libraries/aron/core/navigator/type/ndarray/EigenQuaternion.cpp b/source/RobotAPI/libraries/aron/core/navigator/type/ndarray/EigenQuaternion.cpp
index 96ec0a152..fbea54cbf 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/type/ndarray/EigenQuaternion.cpp
+++ b/source/RobotAPI/libraries/aron/core/navigator/type/ndarray/EigenQuaternion.cpp
@@ -24,6 +24,8 @@
 // Header
 #include "EigenQuaternion.h"
 
+#include <SimoxUtility/algorithm/string/string_conversion.h>
+
 namespace armarx::aron::typenavigator
 {
     // constructors
-- 
GitLab