14 #include <Eigen/Geometry> 15 #include "../visitors/serialization.h" 21 template <
class t_Visitor,
typename t_Scalar,
int t_rows,
int t_flags>
24 Eigen::Matrix<t_Scalar, t_rows, 1, t_flags> &entry,
25 const typename t_Visitor::Parameters ¶m)
28 std::size_t size = visitor.startArray();
30 if (Eigen::Dynamic == t_rows)
36 ARILES_ASSERT((static_cast<int>(size) == t_rows),
"Wrong entry size.");
39 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE i = 0; i < (Eigen::Dynamic == t_rows ? entry.rows() : t_rows); ++i)
49 template <
class t_Visitor,
typename t_Scalar,
int t_rows,
int t_cols,
int t_flags>
52 Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &entry,
53 const typename t_Visitor::Parameters ¶meters)
56 if (Eigen::Dynamic == t_rows || Eigen::Dynamic == t_cols
59 EIGEN_DEFAULT_DENSE_INDEX_TYPE num_rows;
60 EIGEN_DEFAULT_DENSE_INDEX_TYPE num_cols;
66 visitor.template startMap<t_Visitor::SIZE_LIMIT_EQUAL>(3);
67 visitor(num_cols,
"cols", param);
68 ARILES_ASSERT(Eigen::Dynamic == t_cols || t_cols == num_cols,
"Wrong number of columns.");
69 visitor(num_rows,
"rows", param);
70 ARILES_ASSERT(Eigen::Dynamic == t_rows || t_rows == num_rows,
"Wrong number of rows.");
73 Eigen::Matrix<t_Scalar, Eigen::Dynamic, 1> v;
74 visitor(v,
"data", param);
77 ARILES_ASSERT(v.rows() == num_rows * num_cols,
"Wrong entry size.");
79 Eigen::Map<Eigen::Matrix<t_Scalar, t_rows, t_cols, Eigen::RowMajor> > map(v.data(), num_rows, num_cols);
84 Eigen::Matrix<t_Scalar, t_rows * t_cols, 1> v;
88 Eigen::Map<Eigen::Matrix<double, t_rows, t_cols, Eigen::RowMajor> > map(v.data(), t_rows, t_cols);
94 template <
class t_Visitor,
typename t_Scalar,
int t_dim,
int t_mode,
int t_options>
97 Eigen::Transform<t_Scalar, t_dim, t_mode, t_options> &entry,
98 const typename t_Visitor::Parameters ¶m)
103 Eigen::Dynamic == t_dim ? Eigen::Dynamic : t_dim + 1,
104 Eigen::Dynamic == t_dim ? Eigen::Dynamic : t_dim + 1>
107 entry.matrix() = raw_matrix;
111 template <
class t_Visitor,
typename t_Scalar,
int t_options>
114 Eigen::Quaternion<t_Scalar, t_options> &entry,
115 const typename t_Visitor::Parameters ¶meters)
122 visitor.template startMap<t_Visitor::SIZE_LIMIT_EQUAL>(4);
123 visitor(entry.x(),
"x", param);
124 visitor(entry.y(),
"y", param);
125 visitor(entry.z(),
"z", param);
126 visitor(entry.w(),
"w", param);
137 template <
class t_Visitor,
typename t_Scalar,
int t_rows,
int t_flags>
140 const Eigen::Matrix<t_Scalar, t_rows, 1, t_flags> &entry,
141 const typename t_Visitor::Parameters & )
146 writer.startMatrix(
true);
147 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE i = 0; i < (Eigen::Dynamic == t_rows ? entry.rows() : t_rows); ++i)
149 writer.startMatrixRow();
150 writer.writeElement(entry(i));
151 writer.endMatrixRow();
157 writer.startArray(entry.rows(),
true);
158 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE i = 0; i < entry.rows(); ++i)
160 writer.writeElement(entry[i]);
169 template <
class t_Visitor,
typename t_Scalar,
int t_rows,
int t_cols,
int t_flags>
172 const Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &entry,
173 const typename t_Visitor::Parameters ¶m)
178 writer.startMatrix();
179 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE i = 0; i < (Eigen::Dynamic == t_rows ? entry.rows() : t_rows); ++i)
181 writer.startMatrixRow();
182 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE j = 0; j < (Eigen::Dynamic == t_cols ? entry.cols() : t_cols);
185 writer.writeElement(entry(i, j));
187 writer.endMatrixRow();
193 if (Eigen::Dynamic == t_rows || Eigen::Dynamic == t_cols
198 writer(entry.cols(),
"cols", param);
199 writer(entry.rows(),
"rows", param);
202 writer.descend(
"data");
203 writer.startArray(entry.size(),
true);
204 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE i = 0; i < entry.rows(); ++i)
206 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE j = 0; j < entry.cols(); ++j)
208 writer.writeElement(entry(i, j));
219 writer.startArray(entry.size(),
true);
220 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE i = 0; i < t_rows; ++i)
222 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE j = 0; j < t_cols; ++j)
224 writer.writeElement(entry(i, j));
234 template <
class t_Visitor,
typename t_Scalar,
int t_dim,
int t_mode,
int t_options>
237 const Eigen::Transform<t_Scalar, t_dim, t_mode, t_options> &entry,
238 const typename t_Visitor::Parameters ¶m)
245 template <
class t_Visitor,
typename t_Scalar,
int t_options,
class t_Flags>
248 const Eigen::Quaternion<t_Scalar, t_options> &entry,
249 const t_Flags ¶m)
255 writer(entry.x(),
"x", param);
256 writer(entry.y(),
"y", param);
257 writer(entry.z(),
"z", param);
258 writer(entry.w(),
"w", param);
271 template <
class t_Visitor,
typename t_Scalar,
int t_dim,
int t_mode,
int t_options>
274 const Eigen::Transform<t_Scalar, t_dim, t_mode, t_options> &left,
275 const Eigen::Transform<t_Scalar, t_dim, t_mode, t_options> &right,
276 const typename t_Visitor::Parameters ¶m)
279 visitor.equal_ &= (left.isApprox(right, param.template getTolerance<t_Scalar>()));
283 template <
class t_Visitor,
typename t_Scalar,
int t_options>
286 const Eigen::Quaternion<t_Scalar, t_options> &left,
287 const Eigen::Quaternion<t_Scalar, t_options> &right,
288 const typename t_Visitor::Parameters ¶m)
291 visitor.equal_ &= (left.isApprox(right, param.template getTolerance<t_Scalar>()));
295 template <
class t_Visitor,
typename t_Scalar,
int t_rows,
int t_cols,
int t_flags>
298 const Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &left,
299 const Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &right,
300 const typename t_Visitor::Parameters ¶m)
303 visitor.equal_ &= (left.isApprox(right, param.template getTolerance<t_Scalar>()));
314 template <
class t_Visitor,
typename t_Scalar,
int t_rows,
int t_cols,
int t_flags>
317 Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &entry,
318 const typename t_Visitor::Parameters ¶m)
321 if (Eigen::Dynamic == t_rows)
323 if (Eigen::Dynamic == t_cols)
329 entry.resize(0, t_cols);
334 if (Eigen::Dynamic == t_cols)
336 entry.resize(t_rows, 0);
340 entry.setConstant(param.template getDefault<t_Scalar>());
346 template <
class t_Visitor,
typename t_Scalar,
int t_dim,
int t_mode,
int t_options>
349 Eigen::Transform<t_Scalar, t_dim, t_mode, t_options> &entry,
350 const typename t_Visitor::Parameters & )
357 template <
class t_Visitor,
typename t_Scalar,
int t_options>
360 Eigen::Quaternion<t_Scalar, t_options> &entry,
361 const typename t_Visitor::Parameters & )
void ARILES_VISIBILITY_ATTRIBUTE apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::Ariles, t_Left))
#define ARILES_TRACE_FUNCTION
void ARILES_VISIBILITY_ATTRIBUTE apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::defaults::Base, t_Entry))
void ARILES_VISIBILITY_ATTRIBUTE apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES_IS_BASE_ENABLER(ariles::write::Base, t_Entry))
#define ARILES_VISIBILITY_ATTRIBUTE
void ARILES_VISIBILITY_ATTRIBUTE apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES_IS_BASE_ENABLER(ariles::read::Base, t_Entry))