diff --git a/source/RobotAPI/libraries/armem/CMakeLists.txt b/source/RobotAPI/libraries/armem/CMakeLists.txt index 38d9515cc25818652636ca4b8c5e969eaaf9519a..73d3ba403a1ce700891e2351a848e35fd62c8457 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 0000000000000000000000000000000000000000..7b6681236bc3d0517d6fd61656a1dc598a8d6a36 --- /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)); + } + } + +}