From 1943e2070e07eee778052f1fad6c14e774e650c4 Mon Sep 17 00:00:00 2001
From: Fabian Reister <fabian.reister@kit.edu>
Date: Mon, 26 Apr 2021 08:30:33 +0200
Subject: [PATCH] aron: ndarraynavigator: + from(stl)vector

---
 .../core/navigator/data/complex/NDArray.cpp   |  3 +-
 .../core/navigator/data/complex/NDArray.h     | 29 +++++++++++++++++--
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.cpp b/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.cpp
index 0ed94c664..97942372a 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.cpp
+++ b/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.cpp
@@ -239,4 +239,5 @@ case type::e##upperType: \
     {
         return 0;
     }
-}
+
+}  // namespace armarx::aron::datanavigator
diff --git a/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.h b/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.h
index 60d836103..5e447b102 100644
--- a/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.h
+++ b/source/RobotAPI/libraries/aron/core/navigator/data/complex/NDArray.h
@@ -24,16 +24,22 @@
 #pragma once
 
 // STD/STL
+#include <cstddef>
+#include <functional>
 #include <memory>
 #include <map>
+#include <numeric>
+#include <vector>
 
 // ArmarX
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+
 #include <RobotAPI/libraries/aron/core/navigator/data/Navigator.h>
 
 namespace armarx::aron::datanavigator
 {
     class NDArrayNavigator;
-    typedef std::shared_ptr<NDArrayNavigator> NDArrayNavigatorPtr;
+    using NDArrayNavigatorPtr = std::shared_ptr<NDArrayNavigator>;
 
     class NDArrayNavigator :
         virtual public Navigator
@@ -41,7 +47,6 @@ namespace armarx::aron::datanavigator
     public:
         using PointerType = NDArrayNavigatorPtr;
 
-    public:
         // constructors
         NDArrayNavigator(const Path& path = Path());
         NDArrayNavigator(const data::AronNDArrayPtr&, const Path& path = Path());
@@ -63,11 +68,31 @@ namespace armarx::aron::datanavigator
         /// Return dimensions in a readable string such as "(2, 3, 4)".
         static std::string DimensionsToString(const std::vector<int>& dimensions);
 
+        // TODO(fabian.reister): move this to VectorConverter?
+        template<typename T>
+        static NDArrayNavigatorPtr FromVector(const std::vector<T>& data)
+        {
+            NDArrayNavigatorPtr ndArr(new NDArrayNavigator);
+
+            ndArr->setDimensions({static_cast<int>(data.size()), sizeof(T)});
+            ndArr->setData(data);
+
+            return ndArr;
+        }
+
 
         // public member functions
         unsigned char* getData() const;
         void setData(unsigned int, const unsigned char*);
 
+        // TODO(fabian.reister): move this to VectorConverter?
+        template<typename T>
+        void setData(const std::vector<T>& data)
+        {
+            using E = typename decltype(aron->data)::value_type;
+            setData(sizeof(T) * data.size(), reinterpret_cast < const E* >(data.data()));
+        }
+
         std::vector<int> getDimensions() const;
         void setDimensions(const std::vector<int>&);
         void addDimension(int);
-- 
GitLab