From 3aa5d2670aa332284d12ee5dc173052a58f25237 Mon Sep 17 00:00:00 2001
From: Rainer Kartmann <rainer.kartmann@kit.edu>
Date: Fri, 9 Oct 2020 16:21:38 +0200
Subject: [PATCH] Move and define ice_conversions in ArmarXObjects library

---
 .../ObjectPoseObserver/ice_conversions.cpp    | 11 ---
 .../ObjectPoseObserver/ice_conversions.h      |  2 -
 .../libraries/ArmarXObjects/CMakeLists.txt    |  2 +
 .../ArmarXObjects/ice_conversions.cpp         | 68 +++++++++++++++++++
 .../libraries/ArmarXObjects/ice_conversions.h | 28 ++++++++
 5 files changed, 98 insertions(+), 13 deletions(-)
 create mode 100644 source/RobotAPI/libraries/ArmarXObjects/ice_conversions.cpp
 create mode 100644 source/RobotAPI/libraries/ArmarXObjects/ice_conversions.h

diff --git a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp
index fb5a3bebe..0f520c8fc 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp
+++ b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.cpp
@@ -34,17 +34,6 @@ namespace armarx
         return cast->toEigen();
     }
 
-
-    std::ostream& objpose::operator<<(std::ostream& os, const ObjectID& id)
-    {
-        os << "'" << id.dataset << "/" << id.className;
-        if (!id.instanceName.empty())
-        {
-            os << "/" << id.instanceName;
-        }
-        return os << "'";
-    }
-
     const simox::meta::EnumNames<objpose::ObjectTypeEnum> objpose::ObjectTypeEnumNames =
     {
         { objpose::ObjectTypeEnum::AnyObject, "AnyObject" },
diff --git a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h
index 095798070..1cfac6f00 100644
--- a/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h
+++ b/source/RobotAPI/components/ObjectPoseObserver/ice_conversions.h
@@ -19,8 +19,6 @@ namespace simox
 namespace armarx::objpose
 {
 
-    std::ostream& operator<<(std::ostream& os, const ObjectID& id);
-
     extern const simox::meta::EnumNames<objpose::ObjectTypeEnum> ObjectTypeEnumNames;
 
 
diff --git a/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt b/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt
index 8bda146bb..1eb0e4d81 100644
--- a/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt
+++ b/source/RobotAPI/libraries/ArmarXObjects/CMakeLists.txt
@@ -13,6 +13,7 @@ set(LIB_FILES
     ObjectFinder.cpp
 
     json_conversions.cpp
+    ice_conversions.cpp
 )
 set(LIB_HEADERS
     ArmarXObjects.h
@@ -22,6 +23,7 @@ set(LIB_HEADERS
     ObjectFinder.h
 
     json_conversions.h
+    ice_conversions.h
 )
 
 
diff --git a/source/RobotAPI/libraries/ArmarXObjects/ice_conversions.cpp b/source/RobotAPI/libraries/ArmarXObjects/ice_conversions.cpp
new file mode 100644
index 000000000..7dd31ad93
--- /dev/null
+++ b/source/RobotAPI/libraries/ArmarXObjects/ice_conversions.cpp
@@ -0,0 +1,68 @@
+#include "ice_conversions.h"
+
+
+namespace armarx
+{
+    std::ostream& data::operator<<(std::ostream& os, const ObjectID& id)
+    {
+        os << "'" << id.dataset << "/" << id.className;
+        if (!id.instanceName.empty())
+        {
+            os << "/" << id.instanceName;
+        }
+        return os << "'";
+    }
+
+}
+
+void armarx::fromIce(const data::ObjectID& ice, ObjectID& id)
+{
+    id = fromIce(ice);
+}
+
+armarx::ObjectID armarx::fromIce(const data::ObjectID& ice)
+{
+    return { ice.dataset, ice.className, ice.instanceName };
+}
+
+void armarx::toIce(data::ObjectID& ice, const ObjectID& id)
+{
+    ice.dataset = id.dataset();
+    ice.className = id.className();
+    ice.instanceName = id.instanceName();
+}
+
+armarx::data::ObjectID armarx::toIce(const ObjectID& id)
+{
+    data::ObjectID ice;
+    toIce(ice, id);
+    return ice;
+}
+
+void armarx::fromIce(const data::ObjectIDSeq& ice, std::vector<ObjectID>& ids)
+{
+    ids.clear();
+    std::transform(ice.begin(), ice.end(), std::back_inserter(ids),
+                   static_cast<ObjectID(*)(const data::ObjectID&)>(&fromIce));
+}
+
+std::vector<armarx::ObjectID> armarx::fromIce(const data::ObjectIDSeq& ice)
+{
+    std::vector<ObjectID> ids;
+    fromIce(ice, ids);
+    return ids;
+}
+
+void armarx::toIce(data::ObjectIDSeq& ice, const std::vector<ObjectID>& ids)
+{
+    ice.clear();
+    std::transform(ids.begin(), ids.end(), std::back_inserter(ice),
+                   static_cast<data::ObjectID(*)(const ObjectID&)>(&toIce));
+}
+
+armarx::data::ObjectIDSeq armarx::toIce(const std::vector<ObjectID>& ids)
+{
+    data::ObjectIDSeq ice;
+    toIce(ice, ids);
+    return ice;
+}
diff --git a/source/RobotAPI/libraries/ArmarXObjects/ice_conversions.h b/source/RobotAPI/libraries/ArmarXObjects/ice_conversions.h
new file mode 100644
index 000000000..e17f37e35
--- /dev/null
+++ b/source/RobotAPI/libraries/ArmarXObjects/ice_conversions.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <RobotAPI/interface/ArmarXObjects/ArmarXObjectsTypes.h>
+
+#include "ObjectID.h"
+
+
+namespace armarx::data
+{
+    std::ostream& operator<<(std::ostream& os, const ObjectID& id);
+}
+
+namespace armarx
+{
+
+    void fromIce(const data::ObjectID& ice, ObjectID& id);
+    ObjectID fromIce(const data::ObjectID& id);
+
+    void fromIce(const data::ObjectIDSeq& ice, std::vector<ObjectID>& ids);
+    std::vector<ObjectID> fromIce(const data::ObjectIDSeq& id);
+
+    void toIce(data::ObjectID& ice, const ObjectID& ids);
+    data::ObjectID toIce(const ObjectID& ids);
+
+    void toIce(data::ObjectIDSeq& ice, const std::vector<ObjectID>& ids);
+    data::ObjectIDSeq toIce(const std::vector<ObjectID>& ids);
+
+}
-- 
GitLab