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) {
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>
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>
340 if (serializing_.find(regelem->id()) == serializing_.end()) {
341 serializing_.insert(regelem->id());
357 auto res = deserial_.find(
id);
358 if (res == deserial_.end()) {
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) {
std::map< lanelet::Id, DeserialInfo > deserial_
RegulatoryElementConstPtrs regulatoryElements() const
std::shared_ptr< RegulatoryElement > RegulatoryElementPtr
bool expired() const noexcept
bool hasCustomCenterline() const
std::vector< lanelet::RegulatoryElementPtr * > toDeserialize
void deserializationDone(lanelet::RegulatoryElementPtr ®elem)
bool currentlyDeserializing(lanelet::Id id, lanelet::RegulatoryElementPtr ®elem)
std::set< lanelet::Id > serializing_
std::unordered_map< Id, Point3d > Map
Eigen::Vector3d BasicPoint3d
void save_construct_data(Archive &ar, const lanelet::RegulatoryElementData *r, unsigned int)
const std::string & value() const
void save(Archive &ar, const lanelet::LaneletMap &m, unsigned int)
BasicPoint3d to3D(const BasicPoint2d &primitive)
std::vector< LineStrings3d > InnerBounds
lanelet::RegulatoryElementPtr deserialResult
bool expired() const noexcept
std::vector< Point3d > Points3d
void setCenterline(const LineString3d ¢erline)
static RegulatoryElementPtr create(std::string ruleName, const RegulatoryElementDataPtr &data)
const std::shared_ptr< const LaneletData > & constData() const
void loadRegelems(Archive &ar, RegelemsT ®elems)
size_t size() const noexcept
std::shared_ptr< T > removeConst(std::shared_ptr< const T > t)
std::unique_ptr< LaneletMap > load(const std::string &filename, const Origin &origin=Origin::defaultOrigin(), ErrorMessages *errors=nullptr, const io::Configuration ¶ms=io::Configuration())
Loads a lanelet map from a file.
std::shared_ptr< const RegulatoryElement > RegulatoryElementConstPtr
void saveRegelems(Archive &ar, RegelemsT regelems)
BasicPoint2d to2D(const BasicPoint3d &primitive)
bool inverted() const noexcept
ConstLineString3d centerline() const
RegulatoryElementConstPtrs regulatoryElements() const
void serialize(Archive &, lanelet::RegulatoryElementData &, unsigned int)
bool currentlySerializing(const lanelet::RegulatoryElementPtr ®elem)
void load_construct_data(Archive &ar, lanelet::RegulatoryElementData *r, unsigned int)
RuleParameterMap parameters
std::vector< LineString3d > LineStrings3d