Helios++
Helios software for LiDAR simulations
serial_arma.h
1 #pragma once
2 
3 #include <armadillo>
4 
5 namespace boost { namespace serialization{
6 
10 template<class Archive>
11 inline void serialize(Archive &ar, arma::colvec &vec, const unsigned int version){
12  boost::serialization::split_free(ar, vec, version);
13 }
14 
22 template <class Archive>
23 void save(Archive &ar, arma::colvec const &vec, const unsigned int version){
24  size_t const m = vec.size();
25  ar & m;
26  for(size_t i = 0 ; i < m ; ++i) ar & vec[i];
27 }
28 
36 template <class Archive>
37 void load(Archive &ar, arma::colvec &vec, const unsigned int version){
38  size_t m;
39  ar & m;
40  vec.resize(m);
41  for(size_t i = 0 ; i < m ; ++i) ar & vec[i];
42 }
43 
47 template<class Archive>
48 inline void serialize(Archive &ar, arma::mat &mat, const unsigned int version){
49  boost::serialization::split_free(ar, mat, version);
50 }
51 
59 template <class Archive>
60 void save(Archive &ar, arma::mat const &mat, const unsigned int version){
61  size_t const m = mat.n_rows;
62  size_t const n = mat.n_cols;
63  ar &m &n;
64  for(size_t i = 0 ; i < m ; ++i){ // i-th row
65  for(size_t j = 0 ; j < n ; ++j){ // j-th row
66  ar &mat.at(i, j);
67  }
68  }
69 }
70 
78 template <class Archive>
79 void load(Archive &ar, arma::mat &mat, const unsigned int version){
80  size_t m, n; // m-rows, n-cols
81  ar &m &n;
82  mat.resize(m, n);
83  for(size_t i = 0 ; i < m ; ++i){
84  for(size_t j = 0 ; j < n ; ++j){
85  ar &mat.at(i, j);
86  }
87  }
88 }
89 
90 }}