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