Skip to content
Snippets Groups Projects
Commit 9a099be9 authored by Fabian Reister's avatar Fabian Reister
Browse files

moving functionality from NDArrayNavigator to VectorConverter

parent c24d100f
No related branches found
No related tags found
1 merge request!140armem/dev -> master
...@@ -63,7 +63,7 @@ namespace armarx ...@@ -63,7 +63,7 @@ namespace armarx
inline aron::datanavigator::NDArrayNavigatorPtr toAron(const LaserScan& laserScan) inline aron::datanavigator::NDArrayNavigatorPtr toAron(const LaserScan& laserScan)
{ {
return aron::datanavigator::NDArrayNavigator::FromVector(laserScan); return aron::converter::AronVectorConverter::ConvertFromVector(laserScan);
} }
......
...@@ -39,7 +39,7 @@ namespace armarx::aron::converter ...@@ -39,7 +39,7 @@ namespace armarx::aron::converter
{ {
public: public:
AronVectorConverter() = delete; AronVectorConverter() = delete;
template<typename T> template<typename T>
static std::vector<T> ConvertToVector(const datanavigator::NDArrayNavigatorPtr& nav) static std::vector<T> ConvertToVector(const datanavigator::NDArrayNavigatorPtr& nav)
{ {
...@@ -47,16 +47,16 @@ namespace armarx::aron::converter ...@@ -47,16 +47,16 @@ namespace armarx::aron::converter
const auto& dims = nav->getDimensions(); const auto& dims = nav->getDimensions();
if(dims.size() != 2) if (dims.size() != 2)
{ {
throw error::AronException("AronVectorConverter", "ConvertToVector", "The NDArray must have two dimensions.", nav->getPath()); throw error::AronException("AronVectorConverter", "ConvertToVector", "The NDArray must have two dimensions.", nav->getPath());
} }
if(dims.at(1) != sizeof(T)) if (dims.at(1) != sizeof(T))
{ {
throw error::AronException("AronVectorConverter", "ConvertToVector", "Dimension 1 of the array has to match the element size.", nav->getPath()); throw error::AronException("AronVectorConverter", "ConvertToVector", "Dimension 1 of the array has to match the element size.", nav->getPath());
} }
const int size = std::accumulate(std::begin(dims), std::end(dims), 1, std::multiplies<>()); const int size = std::accumulate(std::begin(dims), std::end(dims), 1, std::multiplies<>());
std::vector<T> v(dims.at(0)); std::vector<T> v(dims.at(0));
...@@ -64,6 +64,19 @@ namespace armarx::aron::converter ...@@ -64,6 +64,19 @@ namespace armarx::aron::converter
return v; return v;
} }
template<typename T>
static datanavigator::NDArrayNavigatorPtr ConvertFromVector(const std::vector<T>& data)
{
datanavigator::NDArrayNavigatorPtr ndArr(new datanavigator::NDArrayNavigator);
ndArr->setDimensions({static_cast<int>(data.size()), sizeof(T)});
ndArr->setData(sizeof(T) * data.size(), reinterpret_cast <const unsigned char* >(data.data()));
return ndArr;
}
}; };
} // namespace armarx::aron::converter } // namespace armarx::aron::converter
...@@ -68,31 +68,10 @@ namespace armarx::aron::datanavigator ...@@ -68,31 +68,10 @@ namespace armarx::aron::datanavigator
/// Return dimensions in a readable string such as "(2, 3, 4)". /// Return dimensions in a readable string such as "(2, 3, 4)".
static std::string DimensionsToString(const std::vector<int>& dimensions); 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 // public member functions
unsigned char* getData() const; unsigned char* getData() const;
void setData(unsigned int, const unsigned char*); 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; std::vector<int> getDimensions() const;
void setDimensions(const std::vector<int>&); void setDimensions(const std::vector<int>&);
void addDimension(int); void addDimension(int);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment