Skip to content
Snippets Groups Projects
Commit 0ecbdb3b authored by webmanue's avatar webmanue
Browse files

serialize dynamically sized Eigen matrices

- use index based access to avoid buffer
parent fe2648d3
No related branches found
No related tags found
No related merge requests found
Pipeline #121017 passed
......@@ -68,12 +68,13 @@ OutputIterator serialize(const std::vector<ValueType> &vector,
template <class OutputIterator, class ValueType, int Rows, int Cols>
OutputIterator serialize(const Eigen::Matrix<ValueType, Rows, Cols> &vector,
OutputIterator bufferBegin) {
std::array<ValueType, Rows * Cols> buffer;
Eigen::Map<Eigen::Matrix<ValueType, Rows, Cols,
Cols == 1 ? Eigen::ColMajor : Eigen::RowMajor>>
wrappedBuffer(buffer.data(), vector.rows(), vector.cols());
wrappedBuffer = vector;
return std::copy(buffer.begin(), buffer.end(), bufferBegin);
for (Eigen::Index i = 0; i < vector.rows(); ++i) {
for (Eigen::Index j = 0; j < vector.cols(); ++j) {
*bufferBegin = vector(i, j);
bufferBegin++;
}
}
return bufferBegin;
}
/**
......
......@@ -69,6 +69,20 @@ TEST_F(serialize_Test, serializing_eigen_matrix_works) {
DoubleEq(0.)));
}
TEST_F(serialize_Test, serializing_dynamically_sized_eigen_matrix_works) {
Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> values(3, 2);
values << 1, 2, 3, 4, 5, 6;
std::vector<double> buffer(7);
const auto result = serialize(values, buffer.begin());
EXPECT_THAT(result, Eq(buffer.begin() + 6));
EXPECT_THAT(buffer, ElementsAre(DoubleEq(1.), DoubleEq(2.), DoubleEq(3.),
DoubleEq(4.), DoubleEq(5.), DoubleEq(6.),
DoubleEq(0.)));
}
TEST_F(serialize_Test, serializing_eigen_vector_works) {
Eigen::Vector3d values;
values << 1, 2, 3;
......
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