4 #include <boost/serialization/map.hpp>
5 #include <boost/serialization/serialization.hpp>
6 #include <boost/serialization/shared_ptr.hpp>
7 #include <boost/serialization/split_free.hpp>
8 #include <boost/serialization/variant.hpp>
9 #include <boost/serialization/vector.hpp>
18 template <
typename Archive,
typename RegelemsT>
20 auto size = regelems.size();
22 for (
auto& regelem : regelems) {
23 auto ncRegelem = std::const_pointer_cast<RegulatoryElement>(regelem);
27 template <
typename Archive,
typename RegelemsT>
31 regelems.resize(size);
32 for (
auto i = 0u; i < size; ++i) {
40 namespace serialization {
41 template <
typename Archive>
48 template <
typename Archive>
53 template <
typename Archive>
55 boost::serialization::load_map_collection(ar,
p);
58 template <
typename Archive>
60 boost::serialization::stl::save_collection(ar,
p);
63 template <
typename Archive>
65 boost::serialization::load_map_collection(ar,
p);
68 template <
typename Archive>
70 boost::serialization::stl::save_collection(ar,
p);
74 template <
typename Archive>
76 template <
class Archive>
80 ar << lltnc->
id << lltnc->attributes << lltnc->leftBound() << lltnc->rightBound();
86 lanelet::LineString3d center(std::const_pointer_cast<lanelet::LineStringData>(centerline.constData()),
87 centerline.inverted());
92 template <
class Archive>
101 ar >>
id >> attrs >> left >> right;
104 bool hasCenterline =
false;
113 template <
typename Archive>
119 template <
typename Archive>
121 std::shared_ptr<lanelet::LaneletData> ptr;
126 template <
typename Archive>
133 template <
typename Archive>
135 std::shared_ptr<lanelet::LaneletData> ptr;
141 template <
typename Archive>
149 template <
typename Archive>
157 template <
typename Archive>
159 template <
class Archive>
163 ar << lnc->
id << lnc->attributes << lnc->points();
166 template <
class Archive>
173 ar >>
id >> attr >> points;
177 template <
typename Archive>
183 template <
typename Archive>
185 std::shared_ptr<lanelet::LineStringData> ptr;
191 template <
typename Archive>
197 template <
typename Archive>
199 std::shared_ptr<lanelet::LineStringData> ptr;
205 template <
typename Archive>
212 template <
typename Archive>
214 std::shared_ptr<lanelet::LineStringData> ptr;
221 template <
typename Archive>
229 template <
typename Archive>
231 template <
class Archive>
234 ar <<
p->id <<
p->attributes <<
p->point.x() <<
p->point.y() <<
p->point.z();
237 template <
class Archive>
244 ar >>
id >> attrs >> pt.x() >> pt.y() >> pt.z();
248 template <
typename Archive>
253 template <
typename Archive>
255 std::shared_ptr<lanelet::PointData> ptr;
259 template <
typename Archive>
263 template <
typename Archive>
265 std::shared_ptr<lanelet::PointData> ptr;
271 template <
typename Archive>
273 template <
class Archive>
278 ar << anc->attributes;
279 ar << anc->innerBounds();
280 ar << anc->outerBound();
284 template <
class Archive>
292 ar >>
id >> attrs >> inner >> outer;
293 new (a)
AreaData(
id, outer, inner, attrs);
297 template <
typename Archive>
302 template <
typename Archive>
304 std::shared_ptr<lanelet::AreaData> ptr;
308 template <
typename Archive>
313 template <
typename Archive>
315 std::shared_ptr<lanelet::AreaData> ptr;
319 template <
typename Archive>
327 template <
typename Archive>
362 if (!res->second.deserialResult) {
364 res->second.toDeserialize.push_back(®elem);
366 regelem = res->second.deserialResult;
372 auto& entry =
deserial_.find(regelem->id())->second;
373 for (
auto& elem : entry.toDeserialize) {
376 entry.deserialResult = regelem;
383 template <
typename Archive>
385 template <
class Archive>
391 template <
class Archive>
398 ar >>
id >> attr >> params;
402 template <
typename Archive>
406 auto& helper = ar.template get_helper<RegelemSerialization>(&ar);
407 if (helper.currentlySerializing(r)) {
414 template <
typename Archive>
416 auto& helper = ar.template get_helper<RegelemDeserialization>(&ar);
419 if (helper.currentlyDeserializing(
id, r)) {
422 std::shared_ptr<lanelet::RegulatoryElementData> ptr;
425 auto regeltype = typeAttr == ptr->attributes.end() ?
"" : typeAttr->second.value();
427 helper.deserializationDone(r);
430 template <
typename Archive>
432 save(ar, const_pointer_cast<lanelet::RegulatoryElement>(r), 0);
435 template <
typename Archive>
437 load(ar, const_pointer_cast<lanelet::RegulatoryElement>(r), 0);
440 template <
typename Archive>
443 auto storeLayer = [&ar](
auto& layer) {
444 size_t size = layer.
size();
446 for (
auto& pt : layer) {
450 storeLayer(mnc.pointLayer);
451 storeLayer(mnc.lineStringLayer);
452 storeLayer(mnc.polygonLayer);
453 storeLayer(mnc.areaLayer);
454 storeLayer(mnc.laneletLayer);
455 storeLayer(mnc.regulatoryElementLayer);
458 template <
typename Archive>
460 auto loadLayer = [&ar](
auto& layerMap) {
461 using Prim =
typename std::decay_t<decltype(layerMap)>::mapped_type;
464 for (
auto i = 0u; i < size; ++i) {