[traffxml] Process fuzziness attribute in location

Signed-off-by: mvglasow <michael -at- vonglasow.com>
This commit is contained in:
mvglasow
2025-10-27 22:50:05 +02:00
parent fbc150fae2
commit d47aa09053
3 changed files with 34 additions and 9 deletions

View File

@@ -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") << ", ";

View File

@@ -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<std::string> m_destination;
std::optional<std::string> m_direction;
Directionality m_directionality = Directionality::BothDirections;
// TODO std::optional<Fuzziness> m_fuzziness;
std::optional<Fuzziness> m_fuzziness;
std::optional<std::string> m_origin;
Ramps m_ramps = Ramps::None;
std::optional<RoadClass> m_roadClass;

View File

@@ -36,6 +36,14 @@ const boost::bimap<std::string, Directionality> kDirectionalityMap = MakeBimap<s
{"BOTH_DIRECTIONS", Directionality::BothDirections}
});
const boost::bimap<std::string, Fuzziness> kFuzzinessMap = MakeBimap<std::string, Fuzziness>({
{"LOW_RES", Fuzziness::LowRes},
{"MEDIUM_RES", Fuzziness::MediumRes},
{"END_UNKNOWN", Fuzziness::EndUnknown},
{"START_UNKNOWN", Fuzziness::StartUnknown},
{"EXTENT_UNKNOWN", Fuzziness::ExtentUnknown}
});
const boost::bimap<std::string, Ramps> kRampsMap = MakeBimap<std::string, Ramps>({
{"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);