diff --git a/libs/traffxml/traff_model.cpp b/libs/traffxml/traff_model.cpp index 299b03813..f7b4ba483 100644 --- a/libs/traffxml/traff_model.cpp +++ b/libs/traffxml/traff_model.cpp @@ -370,6 +370,19 @@ std::string DebugPrint(Directionality directionality) UNREACHABLE(); } +std::string DebugPrint(Fuzziness fuzziness) +{ + switch (fuzziness) + { + case Fuzziness::LowRes: return "LowRes"; + case Fuzziness::MediumRes: return "MediumRes"; + case Fuzziness::EndUnknown: return "EndUnknown"; + case Fuzziness::StartUnknown: return "StartUnknown"; + case Fuzziness::ExtentUnknown: return "ExtentUnknown"; + } + UNREACHABLE(); +} + std::string DebugPrint(Ramps ramps) { switch (ramps) @@ -526,7 +539,7 @@ std::string DebugPrint(TraffLocation location) os << "via: " << (location.m_via ? DebugPrint(location.m_via.value()) : "nullopt") << ", "; os << "to: " << (location.m_to ? DebugPrint(location.m_to.value()) : "nullopt") << ", "; os << "notVia: " << (location.m_notVia ? DebugPrint(location.m_notVia.value()) : "nullopt") << ", "; - // TODO fuzziness (not yet implemented in struct) + os << "fuzziness: " << (location.m_fuzziness ? DebugPrint(location.m_fuzziness.value()) : "nullopt") << ", "; os << "country: " << location.m_country.value_or("nullopt") << ", "; os << "territory: " << location.m_territory.value_or("nullopt") << ", "; os << "town: " << location.m_town.value_or("nullopt") << ", "; diff --git a/libs/traffxml/traff_model.hpp b/libs/traffxml/traff_model.hpp index 0cee71c26..616f8b31a 100644 --- a/libs/traffxml/traff_model.hpp +++ b/libs/traffxml/traff_model.hpp @@ -100,7 +100,14 @@ enum class Directionality BothDirections }; -// TODO enum fuzziness +enum class Fuzziness +{ + LowRes, + MediumRes, + EndUnknown, + StartUnknown, + ExtentUnknown +}; enum class Ramps { @@ -383,7 +390,7 @@ struct TraffLocation std::optional m_destination; std::optional m_direction; Directionality m_directionality = Directionality::BothDirections; - // TODO std::optional m_fuzziness; + std::optional m_fuzziness; std::optional m_origin; Ramps m_ramps = Ramps::None; std::optional m_roadClass; diff --git a/libs/traffxml/traff_model_xml.cpp b/libs/traffxml/traff_model_xml.cpp index bc31b346b..243956921 100644 --- a/libs/traffxml/traff_model_xml.cpp +++ b/libs/traffxml/traff_model_xml.cpp @@ -36,6 +36,14 @@ const boost::bimap kDirectionalityMap = MakeBimap kFuzzinessMap = MakeBimap({ + {"LOW_RES", Fuzziness::LowRes}, + {"MEDIUM_RES", Fuzziness::MediumRes}, + {"END_UNKNOWN", Fuzziness::EndUnknown}, + {"START_UNKNOWN", Fuzziness::StartUnknown}, + {"EXTENT_UNKNOWN", Fuzziness::ExtentUnknown} +}); + const boost::bimap kRampsMap = MakeBimap({ {"ALL_RAMPS", Ramps::All}, {"ENTRY_RAMP", Ramps::Entry}, @@ -597,9 +605,7 @@ bool LocationFromXml(pugi::xml_node const & node, TraffLocation & location) location.m_direction = OptionalStringFromXml(node.attribute("direction")); EnumFromXml(node.attribute("directionality"), location.m_directionality, kDirectionalityMap); - - // TODO fuzziness (not yet implemented in struct) - + location.m_fuzziness = OptionalEnumFromXml(node.attribute("fuzziness"), kFuzzinessMap); location.m_origin = OptionalStringFromXml(node.attribute("origin")); EnumFromXml(node.attribute("ramps"), location.m_ramps, kRampsMap); location.m_roadClass = OptionalEnumFromXml(node.attribute("road_class"), kRoadClassMap); @@ -628,9 +634,8 @@ void LocationToXml(TraffLocation const & location, pugi::xml_node & node) if (location.m_direction) node.append_attribute("direction").set_value(location.m_direction.value()); EnumToXml(location.m_directionality, "directionality", node, kDirectionalityMap); - - // TODO fuzziness (not yet implemented in struct) - + if (location.m_fuzziness) + EnumToXml(location.m_fuzziness.value(), "fuzziness", node, kFuzzinessMap); if (location.m_origin) node.append_attribute("origin").set_value(location.m_origin.value()); EnumToXml(location.m_ramps, "ramps", node, kRampsMap);