21 requires (std::is_trivially_copyable_v<T>)
22 void serialize(std::ofstream& f,
const T& x)
24 f.write(
reinterpret_cast<const char*
>(&x),
sizeof(T));
28 requires (std::is_trivially_copyable_v<T>)
29 void deserialize(std::ifstream& f, T& x)
31 f.read(
reinterpret_cast<char*
>(&x),
sizeof(T));
36 template<
typename T,
int R=-1,
int C=-1>
37 void serialize(std::ofstream& f,
const Eigen::Matrix<T,R,C>& x)
39 Index r = x.rows(), c = x.cols();
40 f.write(
reinterpret_cast<const char*
>(&r),
sizeof(Index));
41 f.write(
reinterpret_cast<const char*
>(&c),
sizeof(Index));
42 for(Index i = 0 ; i < r ; i++)
43 for(Index j = 0 ; j < c ; j++)
47 template<
typename T,
int R=-1,
int C=-1>
48 void deserialize(std::ifstream& f, Eigen::Matrix<T,R,C>& x)
51 f.read(
reinterpret_cast<char*
>(&r),
sizeof(Index));
52 f.read(
reinterpret_cast<char*
>(&c),
sizeof(Index));
54 if constexpr(R == -1 && C == -1)
56 else if constexpr(R == -1 || C == -1)
57 x.resize(std::max(r,c));
59 assert_release(R == r && C == c);
61 for(Index i = 0 ; i < r ; i++)
62 for(Index j = 0 ; j < c ; j++)
63 deserialize(f,x(i,j));
69 void serialize(std::ofstream& f,
const SampledTraj<T>& x)
71 Index size = x.nb_samples();
72 f.write(
reinterpret_cast<const char*
>(&size),
sizeof(size));
74 for(
const auto& [ti, xi] : x)
82 void deserialize(std::ifstream& f, SampledTraj<T>& x)
86 f.read(
reinterpret_cast<char*
>(&size),
sizeof(size));
88 for(Index i = 0 ; i < size ; i++)
90 double ti; deserialize(f,ti);
91 T xi; deserialize(f,xi);