25 Eigen::Matrix<t_Scalar, t_rows, 1, t_flags> &entry,
26 const typename t_Visitor::Parameters ¶m)
29 const std::size_t size = visitor.startVector();
31 if constexpr (Eigen::Dynamic == t_rows)
37 CPPUT_ASSERT((
static_cast<int>(size) == t_rows),
"Wrong entry size.");
40 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE i = 0; i < (Eigen::Dynamic == t_rows ? entry.rows() : t_rows); ++i)
42 visitor.visitVectorElement(entry[i], param);
52 Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &entry,
53 const typename t_Visitor::Parameters ¶meters)
56 const bool dynamic = Eigen::Dynamic == t_rows or Eigen::Dynamic == t_cols;
57 std::size_t num_rows = Eigen::Dynamic == t_rows ? 0 :
static_cast<std::size_t
>(t_cols);
58 std::size_t num_cols = Eigen::Dynamic == t_cols ? 0 :
static_cast<std::size_t
>(t_rows);
60 visitor.startMatrix(num_cols, num_rows, dynamic, parameters);
63 Eigen::Dynamic == t_cols ||
static_cast<std::size_t
>(t_cols) == num_cols,
64 "Wrong number of columns.");
66 Eigen::Dynamic == t_rows ||
static_cast<std::size_t
>(t_rows) == num_rows,
"Wrong number of rows.");
69 entry.resize(num_rows, num_cols);
71 for (std::size_t i = 0; i < num_rows; ++i)
73 visitor.startMatrixRow(i, num_cols, parameters);
74 for (std::size_t j = 0; j < num_cols; ++j)
76 visitor.visitMatrixElement(entry(i, j), parameters);
78 visitor.endMatrixRow(parameters);
81 visitor.endMatrix(dynamic, parameters);
88 Eigen::Transform<t_Scalar, t_dim, t_mode, t_options> &entry,
89 const typename t_Visitor::Parameters ¶m)
94 Eigen::Dynamic == t_dim ? Eigen::Dynamic : t_dim + 1,
95 Eigen::Dynamic == t_dim ? Eigen::Dynamic : t_dim + 1>
98 entry.matrix() = raw_matrix;
105 Eigen::Quaternion<t_Scalar, t_options> &entry,
106 const typename t_Visitor::Parameters ¶meters)
110 typename t_Visitor::Parameters param = parameters;
111 param.allow_missing_entries_ =
false;
113 visitor.startMap(t_Visitor::SIZE_LIMIT_EQUAL, 4);
114 visitor.visitMapEntry(entry.x(),
"x", param,
true);
115 visitor.visitMapEntry(entry.y(),
"y", param,
true);
116 visitor.visitMapEntry(entry.z(),
"z", param,
true);
117 visitor.visitMapEntry(entry.w(),
"w", param,
true);
131 const Eigen::Matrix<t_Scalar, t_rows, 1, t_flags> &entry,
132 const typename t_Visitor::Parameters ¶m)
135 writer.startVector(entry.rows());
136 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE i = 0; i < (Eigen::Dynamic == t_rows ? entry.rows() : t_rows); ++i)
138 writer.visitVectorElement(entry[i], param);
147 const Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &entry,
148 const typename t_Visitor::Parameters ¶m)
150 const EIGEN_DEFAULT_DENSE_INDEX_TYPE rows = entry.rows();
151 const EIGEN_DEFAULT_DENSE_INDEX_TYPE cols = entry.cols();
153 const bool dynamic = Eigen::Dynamic == t_rows or Eigen::Dynamic == t_cols;
154 writer.startMatrix(dynamic, cols, rows, param);
155 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE i = 0; i < rows; ++i)
157 writer.startMatrixRow(cols, param);
158 for (EIGEN_DEFAULT_DENSE_INDEX_TYPE j = 0; j < cols; ++j)
160 writer.visitMatrixElement(entry(i, j), param);
162 writer.endMatrixRow(param);
164 writer.endMatrix(dynamic, param);
180 void apply_write(t_Visitor &writer,
const Eigen::Quaternion<t_Scalar, t_options> &entry,
const t_Flags ¶m)
184 writer.startMap(param, 4);
186 writer.visitMapEntry(entry.x(),
"x", param);
187 writer.visitMapEntry(entry.y(),
"y", param);
188 writer.visitMapEntry(entry.z(),
"z", param);
189 writer.visitMapEntry(entry.w(),
"w", param);
205 const Eigen::Transform<t_Scalar, t_dim, t_mode, t_options> &left,
206 const Eigen::Transform<t_Scalar, t_dim, t_mode, t_options> &right,
207 const typename t_Visitor::Parameters ¶m)
210 visitor.equal_ &= (left.isApprox(right, param.template getTolerance<t_Scalar>()));
217 const Eigen::Quaternion<t_Scalar, t_options> &left,
218 const Eigen::Quaternion<t_Scalar, t_options> &right,
219 const typename t_Visitor::Parameters ¶m)
222 visitor.equal_ &= (left.isApprox(right, param.template getTolerance<t_Scalar>()));
229 const Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &left,
230 const Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &right,
231 const typename t_Visitor::Parameters ¶m)
234 visitor.equal_ &= (left.isApprox(right, param.template getTolerance<t_Scalar>()));
248 Eigen::Matrix<t_Scalar, t_rows, t_cols, t_flags> &entry,
249 const typename t_Visitor::Parameters ¶m)
252 if constexpr (Eigen::Dynamic == t_rows)
254 if constexpr (Eigen::Dynamic == t_cols)
260 entry.resize(0, t_cols);
265 if constexpr (Eigen::Dynamic == t_cols)
267 entry.resize(t_rows, 0);
271 entry.setConstant(param.template getDefault<t_Scalar>());
void apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶m, ARILES2_IS_BASE_ENABLER(ariles2::defaults::Base, t_Entry))
void apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES2_IS_BASE_ENABLER(ariles2::read::Base, t_Entry))
void apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters ¶meters, ARILES2_IS_BASE_ENABLER(ariles2::write::Base, t_Entry))