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
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
{
public:
AronVectorConverter() = delete;
template<typename T>
static std::vector<T> ConvertToVector(const datanavigator::NDArrayNavigatorPtr& nav)
{
......@@ -47,16 +47,16 @@ namespace armarx::aron::converter
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());
}
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());
}
const int size = std::accumulate(std::begin(dims), std::end(dims), 1, std::multiplies<>());
std::vector<T> v(dims.at(0));
......@@ -64,6 +64,19 @@ namespace armarx::aron::converter
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
......@@ -68,31 +68,10 @@ 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);
......
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