From 08fbf9fb3efdf2ed40757cd7b9cb29dbab317284 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Mon, 12 Jul 2021 09:27:56 +0200
Subject: [PATCH] Add toIce/fromIce for boost::container_flat_map (not used
 atm)

---
 .../RobotAPI/libraries/armem/CMakeLists.txt   |  1 +
 .../core/ice_conversions_boost_templates.h    | 34 +++++++++++++++++++
 2 files changed, 35 insertions(+)
 create mode 100644 source/RobotAPI/libraries/armem/core/ice_conversions_boost_templates.h

diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt
index 38d9515cc..73d3ba403 100644
--- a/source/RobotAPI/libraries/armem/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem/CMakeLists.txt
@@ -139,6 +139,7 @@ set(LIB_HEADERS
     core/aron_conversions.h
     core/json_conversions.h
     core/ice_conversions.h
+    core/ice_conversions_boost_templates.h
     core/ice_conversions_templates.h
 
     core/error.h
diff --git a/source/RobotAPI/libraries/armem/core/ice_conversions_boost_templates.h b/source/RobotAPI/libraries/armem/core/ice_conversions_boost_templates.h
new file mode 100644
index 000000000..7b6681236
--- /dev/null
+++ b/source/RobotAPI/libraries/armem/core/ice_conversions_boost_templates.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <map>
+
+#include <boost/container/flat_map.hpp>
+
+
+namespace armarx::armem
+{
+    // std::map <-> boost::container::flat_map
+
+    template <class IceKeyT, class IceValueT, class CppKeyT, class CppValueT>
+    void toIce(std::map<IceKeyT, IceValueT>& iceMap,
+               const boost::container::flat_map<CppKeyT, CppValueT>& cppMap)
+    {
+        iceMap.clear();
+        for (const auto& [key, value] : cppMap)
+        {
+            iceMap.emplace(toIce<IceKeyT>(key), toIce<IceValueT>(value));
+        }
+    }
+
+    template <class IceKeyT, class IceValueT, class CppKeyT, class CppValueT>
+    void fromIce(const std::map<IceKeyT, IceValueT>& iceMap,
+                 boost::container::flat_map<CppKeyT, CppValueT>& cppMap)
+    {
+        cppMap.clear();
+        for (const auto& [key, value] : iceMap)
+        {
+            cppMap.emplace(fromIce<CppKeyT>(key), fromIce<CppValueT>(value));
+        }
+    }
+
+}
-- 
GitLab