69 virtual ~IO() =
default;
79 void Save(
const std::string filepath);
86 void Load(
const std::string filepath);
111 ofstream MakeFile(
const std::string filepath)
const;
118 std::tuple<uint64_t, uint64_t*> LoadFile(
const std::string filepath)
const;
124 uint64_t Serialize(
const uint64_t& i);
130 uint64_t Serialize(
const int64_t& i);
136 uint64_t Serialize(
const real& f);
142 std::vector<uint64_t> Serialize(
const vec& m);
148 std::vector<uint64_t> Serialize(
const vec6& m);
154 std::vector<uint64_t> Serialize(
const mat& m);
160 std::vector<uint64_t> Serialize(
const mat6& m);
166 std::vector<uint64_t> Serialize(
const quaternion& m);
172 std::vector<uint64_t> Serialize(
const XYZQuat& m);
178 std::vector<uint64_t> Serialize(
const std::vector<real>& l);
184 std::vector<uint64_t> Serialize(
const std::vector<vec>& l);
190 std::vector<uint64_t> Serialize(
const std::vector<vec6>& l);
196 std::vector<uint64_t> Serialize(
const std::vector<mat>& l);
202 std::vector<uint64_t> Serialize(
const std::vector<mat6>& l);
209 const Eigen::Matrix<real, Eigen::Dynamic, Eigen::Dynamic>& l)
211 std::vector<uint64_t> data;
212 const uint64_t n = l.rows();
213 const uint64_t m = l.cols();
214 data.reserve(2 + n * m);
215 data.push_back(Serialize(n));
216 data.push_back(Serialize(m));
217 for (uint64_t i = 0; i < n; i++) {
218 for (uint64_t j = 0; j < m; j++) {
219 data.push_back(Serialize(l(i, j)));
231 std::vector<uint64_t>
Serialize(
const std::vector<std::vector<T>>& l)
233 std::vector<uint64_t> data;
234 const uint64_t n = l.size();
235 data.push_back(Serialize(n));
237 std::vector<uint64_t> subdata = Serialize(v);
238 data.insert(data.end(), subdata.begin(), subdata.end());
248 uint64_t* Deserialize(
const uint64_t* in, uint64_t& out);
255 uint64_t* Deserialize(
const uint64_t* in, int64_t& out);
262 uint64_t* Deserialize(
const uint64_t* in,
real& out);
269 uint64_t* Deserialize(
const uint64_t* in,
vec& out);
276 uint64_t* Deserialize(
const uint64_t* in,
vec6& out);
283 uint64_t* Deserialize(
const uint64_t* in,
mat& out);
290 uint64_t* Deserialize(
const uint64_t* in,
mat6& out);
297 uint64_t* Deserialize(
const uint64_t* in,
quaternion& out);
304 uint64_t* Deserialize(
const uint64_t* in,
XYZQuat& out);
311 uint64_t* Deserialize(
const uint64_t* in, std::vector<real>& out);
318 uint64_t* Deserialize(
const uint64_t* in, std::vector<vec>& out);
325 uint64_t* Deserialize(
const uint64_t* in, std::vector<vec6>& out);
332 uint64_t* Deserialize(
const uint64_t* in, std::vector<mat>& out);
339 uint64_t* Deserialize(
const uint64_t* in, std::vector<mat6>& out);
348 Eigen::Matrix<real, Eigen::Dynamic, Eigen::Dynamic>& out)
352 remaining = Deserialize(in, n);
353 remaining = Deserialize(remaining, m);
354 if ((out.rows() != n) || (out.cols() != m))
356 for (
unsigned int i = 0; i < n; i++) {
357 for (
unsigned int j = 0; j < m; j++) {
358 remaining = Deserialize(remaining, out(i, j));
372 uint64_t*
Deserialize(
const uint64_t* in, std::vector<std::vector<T>>& out)
375 uint64_t* remaining = Deserialize(in, n);
378 for (
unsigned int i = 0; i < n; i++) {
380 remaining = Deserialize(remaining, v);
390 uint8_t _min_major_version;
392 uint8_t _min_minor_version;
#define DECLDIR
Prefix to export C functions on the compiled library.
Definition: MoorDynAPI.h:68
A Logging utility.
Definition: Log.hpp:149
A helper for the entities to use the logger.
Definition: Log.hpp:223
A base class for all the entities that must save/load data to/from disk.
Definition: IO.hpp:60
uint64_t * Deserialize(const uint64_t *in, std::vector< std::vector< T >> &out)
Unpack a loaded list of lists.
Definition: IO.hpp:372
uint64_t * Deserialize(const uint64_t *in, Eigen::Matrix< real, Eigen::Dynamic, Eigen::Dynamic > &out)
Unpack an arbitrarily large matrix.
Definition: IO.hpp:346
virtual ~IO()=default
Destructor.
std::vector< uint64_t > Serialize(const std::vector< std::vector< T >> &l)
Pack a list of lists to make it writable This function might act recursively.
Definition: IO.hpp:231
std::vector< uint64_t > Serialize(const Eigen::Matrix< real, Eigen::Dynamic, Eigen::Dynamic > &l)
Pack an arbitrarily large matrix.
Definition: IO.hpp:208
virtual std::vector< uint64_t > Serialize(void)=0
Produce the packed data to be saved.
virtual uint64_t * Deserialize(const uint64_t *data)=0
Unpack the data to restore the Serialized information.
MoorDyn2 C++ API namespace.
Definition: Body.cpp:27
vec3 vec
vec3 renaming
Definition: Misc.hpp:130
Eigen::Quaterniond quaternion
Quaternion of real numbers.
Definition: Misc.hpp:144
Eigen::Vector6d vec6
6-D vector of real numbers
Definition: Misc.hpp:126
Eigen::Matrix6d mat6
6x6 matrix of real numbers
Definition: Misc.hpp:138
double real
Real numbers wrapper. It is either double or float.
Definition: Misc.hpp:118
mat3 mat
mat3 renaming
Definition: Misc.hpp:142
Joint of a point and a quaternion.
Definition: Misc.hpp:304