eigen_serialization.cpp
Go to the documentation of this file.
1 
33 #include <Eigen/Geometry>
34 #include <boost/serialization/base_object.hpp>
35 #include <boost/serialization/nvp.hpp>
36 #include <boost/serialization/array.hpp>
38 
40 
41 namespace boost::serialization
42 {
43 /*****************************/
44 /****** Eigen::VectorXd ******/
45 /*****************************/
46 template <class Archive>
47 void save(Archive& ar, const Eigen::VectorXd& g, const unsigned int /*version*/)
48 {
49  long rows = g.rows();
50  ar& BOOST_SERIALIZATION_NVP(rows);
51  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows));
52 }
53 
54 template <class Archive>
55 void load(Archive& ar, Eigen::VectorXd& g, const unsigned int /*version*/)
56 {
57  long rows{ 0 };
58  ar& BOOST_SERIALIZATION_NVP(rows);
59  g.resize(rows);
60  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows));
61 }
62 
63 template <class Archive>
64 void serialize(Archive& ar, Eigen::VectorXd& g, const unsigned int version)
65 {
66  split_free(ar, g, version);
67 }
68 
69 /*****************************/
70 /****** Eigen::Vector3d ******/
71 /*****************************/
72 template <class Archive>
73 void save(Archive& ar, const Eigen::Vector3d& g, const unsigned int /*version*/)
74 {
75  long rows = g.rows();
76  ar& BOOST_SERIALIZATION_NVP(rows);
77  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows));
78 }
79 
80 template <class Archive>
81 void load(Archive& ar, Eigen::Vector3d& g, const unsigned int /*version*/)
82 {
83  long rows{ 0 };
84  ar& BOOST_SERIALIZATION_NVP(rows);
85  g.resize(rows);
86  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows));
87 }
88 
89 template <class Archive>
90 void serialize(Archive& ar, Eigen::Vector3d& g, const unsigned int version)
91 {
92  split_free(ar, g, version);
93 }
94 
95 /*****************************/
96 /****** Eigen::Vector4d ******/
97 /*****************************/
98 template <class Archive>
99 void save(Archive& ar, const Eigen::Vector4d& g, const unsigned int /*version*/)
100 {
101  long rows = g.rows();
102  ar& BOOST_SERIALIZATION_NVP(rows);
103  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows));
104 }
105 
106 template <class Archive>
107 void load(Archive& ar, Eigen::Vector4d& g, const unsigned int /*version*/)
108 {
109  long rows{ 0 };
110  ar& BOOST_SERIALIZATION_NVP(rows);
111  g.resize(rows);
112  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows));
113 }
114 
115 template <class Archive>
116 void serialize(Archive& ar, Eigen::Vector4d& g, const unsigned int version)
117 {
118  split_free(ar, g, version);
119 }
120 
121 /*****************************/
122 /****** Eigen::VectorXi ******/
123 /*****************************/
124 template <class Archive>
125 void save(Archive& ar, const Eigen::VectorXi& g, const unsigned int /*version*/)
126 {
127  long rows = g.rows();
128  ar& BOOST_SERIALIZATION_NVP(rows);
129  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows));
130 }
131 
132 template <class Archive>
133 void load(Archive& ar, Eigen::VectorXi& g, const unsigned int /*version*/)
134 {
135  long rows{ 0 };
136  ar& BOOST_SERIALIZATION_NVP(rows);
137  g.resize(rows);
138  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows));
139 }
140 
141 template <class Archive>
142 void serialize(Archive& ar, Eigen::VectorXi& g, const unsigned int version)
143 {
144  split_free(ar, g, version);
145 }
146 
147 /*******************************/
148 /****** Eigen::Isometry3d ******/
149 /*******************************/
150 
151 template <class Archive>
152 void save(Archive& ar, const Eigen::Isometry3d& g, const unsigned int /*version*/)
153 {
154  ar& boost::serialization::make_nvp("xyz", boost::serialization::make_array(g.translation().data(), 3));
155  Eigen::Quaterniond q(g.linear());
156  ar& boost::serialization::make_nvp("xyzw", boost::serialization::make_array(q.vec().data(), 4));
157 }
158 
159 template <class Archive>
160 void load(Archive& ar, Eigen::Isometry3d& g, const unsigned int /*version*/)
161 {
162  g.setIdentity();
163  ar& boost::serialization::make_nvp("xyz", boost::serialization::make_array(g.translation().data(), 3));
164  Eigen::Quaterniond q;
165  ar& boost::serialization::make_nvp("xyzw", boost::serialization::make_array(q.vec().data(), 4));
166  q.normalize();
167  g.linear() = q.toRotationMatrix();
168 }
169 
170 template <class Archive>
171 void serialize(Archive& ar, Eigen::Isometry3d& g, const unsigned int version)
172 {
173  split_free(ar, g, version);
174 }
175 
176 /*****************************/
177 /****** Eigen::MatrixX2d *****/
178 /*****************************/
179 template <class Archive>
180 void save(Archive& ar, const Eigen::MatrixX2d& g, const unsigned int /*version*/)
181 {
182  long rows = g.rows();
183  ar& BOOST_SERIALIZATION_NVP(rows);
184  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows * 2));
185 }
186 
187 template <class Archive>
188 void load(Archive& ar, Eigen::MatrixX2d& g, const unsigned int /*version*/)
189 {
190  long rows{ 0 };
191  ar& BOOST_SERIALIZATION_NVP(rows);
192  g.resize(rows, 2);
193  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), rows * 2));
194 }
195 
196 template <class Archive>
197 void serialize(Archive& ar, Eigen::MatrixX2d& g, const unsigned int version)
198 {
199  split_free(ar, g, version);
200 }
201 
202 template <class Archive>
203 void save(Archive& ar, const std::variant<std::string, Eigen::Isometry3d>& g, const unsigned int /*version*/)
204 {
205  std::size_t index = g.index();
206  ar& BOOST_SERIALIZATION_NVP(index);
207  if (index == 0) // std::string
208  {
209  const auto& tcp_string = std::get<std::string>(g);
210  ar& BOOST_SERIALIZATION_NVP(tcp_string);
211  }
212  else // Eigen::Isometry3d
213  {
214  const auto& tcp_isometry = std::get<Eigen::Isometry3d>(g);
215  ar& BOOST_SERIALIZATION_NVP(tcp_isometry);
216  }
217 }
218 
219 template <class Archive>
220 void load(Archive& ar, std::variant<std::string, Eigen::Isometry3d>& g, const unsigned int /*version*/)
221 {
222  std::size_t index{ 0 };
223  ar& BOOST_SERIALIZATION_NVP(index);
224  if (index == 0) // std::string
225  {
226  std::string tcp_string;
227  ar& BOOST_SERIALIZATION_NVP(tcp_string);
228  g = tcp_string;
229  }
230  else // Eigen::Isometry3d
231  {
232  Eigen::Isometry3d tcp_isometry{ Eigen::Isometry3d::Identity() };
233  ar& BOOST_SERIALIZATION_NVP(tcp_isometry);
234  g = tcp_isometry;
235  }
236 }
237 
238 template <class Archive>
239 void serialize(Archive& ar, std::variant<std::string, Eigen::Isometry3d>& g, const unsigned int version)
240 {
241  split_free(ar, g, version);
242 }
243 
244 /****************************************/
245 /****** Eigen::Matrix<double, 6, 1> *****/
246 /****************************************/
247 
248 template <class Archive>
249 void serialize(Archive& ar, Eigen::Matrix<double, 6, 1>& g, const unsigned int /*version*/)
250 {
251  ar& boost::serialization::make_nvp("data", boost::serialization::make_array(g.data(), 6));
252 }
253 
254 } // namespace boost::serialization
255 
263 TESSERACT_SERIALIZE_SAVE_LOAD_FREE_ARCHIVES_INSTANTIATE(std::variant<std::string COMMA Eigen::Isometry3d>)
264 TESSERACT_SERIALIZE_FREE_ARCHIVES_INSTANTIATE(Eigen::Matrix<double COMMA 6 COMMA 1>)
boost::serialization::load
void load(Archive &ar, std::atomic< T > &t, const unsigned int)
Definition: atomic_serialization.h:49
boost::serialization::serialize
void serialize(Archive &ar, std::atomic< T > &t, const unsigned int version)
Definition: atomic_serialization.h:57
macros.h
Common Tesseract Macros.
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
Definition: macros.h:71
boost::serialization
Definition: allowed_collision_matrix.h:14
eigen_serialization.h
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
Definition: macros.h:72
serialization.h
Additional Boost serialization wrappers.
TESSERACT_SERIALIZE_FREE_ARCHIVES_INSTANTIATE
#define TESSERACT_SERIALIZE_FREE_ARCHIVES_INSTANTIATE(Type)
Definition: serialization.h:55
TESSERACT_SERIALIZE_SAVE_LOAD_FREE_ARCHIVES_INSTANTIATE
#define TESSERACT_SERIALIZE_SAVE_LOAD_FREE_ARCHIVES_INSTANTIATE(Type)
Definition: serialization.h:77
boost::serialization::save
void save(Archive &ar, const std::atomic< T > &t, const unsigned int)
Definition: atomic_serialization.h:42


tesseract_common
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:01:40