From 7f014bd61664d1b34cee52680378780156629e0a Mon Sep 17 00:00:00 2001 From: Michael Bell Date: Tue, 1 Jun 2021 20:48:12 +0100 Subject: [PATCH] Clarify identifier types used in data facade The data facade interface contains numerous methods for looking up datapoints by identifiers. Many of the parameters use the NodeID or EdgeID types. However, these two identifier types are used for representing three different contexts: 1. Node-based graph edges and nodes 2. Edge-based graph edges and nodes 3. Packed geometries Consider the use of identifier parameters in these examples: --- GetWeightPenaltyForEdgeID(const EdgeID id) <- edge-based edge GetUncompressedForwardWeights(const EdgeID id) <- packed geometry IsLeftHandDriving(const NodeID id) <- edge-based node GetBearingClass(const NodeID node) <- node-based node --- This mixing of contexts within the same interface makes it difficult to understand the relationships and dependencies between the OSRM datasets. For 1. and 2. we continue to use the NodeID and EdgeID types, but change the interface parameter names to identify them as edge-based or node-based graph properties. For 3. we define a new type definition, PackedGeometryID. These changes are to aid with readability. A next step would be to strongly type these definitions, leveraging the Alias template already used for OSM identifiers. --- CHANGELOG.md | 1 + .../datafacade/algorithm_datafacade.hpp | 48 +++-- .../contiguous_internalmem_datafacade.hpp | 201 ++++++++++-------- include/engine/datafacade/datafacade_base.hpp | 59 ++--- include/util/typedefs.hpp | 20 +- 5 files changed, 175 insertions(+), 154 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9ed1703e..6d9c9d58f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - CHANGED: Pass osm_node_ids by reference in osrm::updater::Updater class. [#6298](https://github.com/Project-OSRM/osrm-backend/pull/6298) - FIXED: Fix bug with reading Set values from Lua scripts. [#6285](https://github.com/Project-OSRM/osrm-backend/pull/6285) - FIXED: Bug in bicycle profile that caused exceptions if there is a highway=bicycle in the data. [#6296](https://github.com/Project-OSRM/osrm-backend/pull/6296) + - FIXED: Internal refactoring of identifier types used in data facade [#6044](https://github.com/Project-OSRM/osrm-backend/pull/6044) - Build: - CHANGED: Use the latest node on CI. [#6317](https://github.com/Project-OSRM/osrm-backend/pull/6317) - CHANGED: Migrate Windows CI to GitHub Actions. [#6312](https://github.com/Project-OSRM/osrm-backend/pull/6312) diff --git a/include/engine/datafacade/algorithm_datafacade.hpp b/include/engine/datafacade/algorithm_datafacade.hpp index 38030511c..4ccbf5af3 100644 --- a/include/engine/datafacade/algorithm_datafacade.hpp +++ b/include/engine/datafacade/algorithm_datafacade.hpp @@ -36,24 +36,27 @@ template <> class AlgorithmDataFacade virtual unsigned GetNumberOfEdges() const = 0; - virtual unsigned GetOutDegree(const NodeID n) const = 0; + virtual unsigned GetOutDegree(const NodeID edge_based_node_id) const = 0; - virtual NodeID GetTarget(const EdgeID e) const = 0; + virtual NodeID GetTarget(const EdgeID edge_based_edge_id) const = 0; - virtual const EdgeData &GetEdgeData(const EdgeID e) const = 0; + virtual const EdgeData &GetEdgeData(const EdgeID edge_based_edge_id) const = 0; - virtual EdgeRange GetAdjacentEdgeRange(const NodeID node) const = 0; + virtual EdgeRange GetAdjacentEdgeRange(const NodeID edge_based_node_id) const = 0; // searches for a specific edge - virtual EdgeID FindEdge(const NodeID from, const NodeID to) const = 0; + virtual EdgeID FindEdge(const NodeID edge_based_node_from, + const NodeID edge_based_node_to) const = 0; - virtual EdgeID FindEdgeInEitherDirection(const NodeID from, const NodeID to) const = 0; + virtual EdgeID FindEdgeInEitherDirection(const NodeID edge_based_node_from, + const NodeID edge_based_node_to) const = 0; - virtual EdgeID - FindEdgeIndicateIfReverse(const NodeID from, const NodeID to, bool &result) const = 0; + virtual EdgeID FindEdgeIndicateIfReverse(const NodeID edge_based_node_from, + const NodeID edge_based_node_to, + bool &result) const = 0; - virtual EdgeID FindSmallestEdge(const NodeID from, - const NodeID to, + virtual EdgeID FindSmallestEdge(const NodeID edge_based_node_from, + const NodeID edge_based_node_to, const std::function filter) const = 0; }; @@ -70,23 +73,24 @@ template <> class AlgorithmDataFacade virtual unsigned GetNumberOfEdges() const = 0; - virtual unsigned GetOutDegree(const NodeID n) const = 0; + virtual unsigned GetOutDegree(const NodeID edge_based_node_id) const = 0; - virtual EdgeRange GetAdjacentEdgeRange(const NodeID node) const = 0; + virtual EdgeRange GetAdjacentEdgeRange(const NodeID edge_based_node_id) const = 0; - virtual EdgeWeight GetNodeWeight(const NodeID node) const = 0; + virtual EdgeWeight GetNodeWeight(const NodeID edge_based_node_id) const = 0; - virtual EdgeWeight GetNodeDuration(const NodeID node) const = 0; // TODO: to be removed + virtual EdgeWeight + GetNodeDuration(const NodeID edge_based_node_id) const = 0; // TODO: to be removed - virtual EdgeDistance GetNodeDistance(const NodeID node) const = 0; + virtual EdgeDistance GetNodeDistance(const NodeID edge_based_node_id) const = 0; - virtual bool IsForwardEdge(EdgeID edge) const = 0; + virtual bool IsForwardEdge(EdgeID edge_based_edge_id) const = 0; - virtual bool IsBackwardEdge(EdgeID edge) const = 0; + virtual bool IsBackwardEdge(EdgeID edge_based_edge_id) const = 0; - virtual NodeID GetTarget(const EdgeID e) const = 0; + virtual NodeID GetTarget(const EdgeID edge_based_edge_id) const = 0; - virtual const EdgeData &GetEdgeData(const EdgeID e) const = 0; + virtual const EdgeData &GetEdgeData(const EdgeID edge_based_edge_id) const = 0; virtual const partitioner::MultiLevelPartitionView &GetMultiLevelPartition() const = 0; @@ -94,10 +98,12 @@ template <> class AlgorithmDataFacade virtual const customizer::CellMetricView &GetCellMetric() const = 0; - virtual EdgeRange GetBorderEdgeRange(const LevelID level, const NodeID node) const = 0; + virtual EdgeRange GetBorderEdgeRange(const LevelID level, + const NodeID edge_based_node_id) const = 0; // searches for a specific edge - virtual EdgeID FindEdge(const NodeID from, const NodeID to) const = 0; + virtual EdgeID FindEdge(const NodeID edge_based_node_from, + const NodeID edge_based_node_to) const = 0; }; } // namespace datafacade } // namespace engine diff --git a/include/engine/datafacade/contiguous_internalmem_datafacade.hpp b/include/engine/datafacade/contiguous_internalmem_datafacade.hpp index e448a8f57..d426ed84f 100644 --- a/include/engine/datafacade/contiguous_internalmem_datafacade.hpp +++ b/include/engine/datafacade/contiguous_internalmem_datafacade.hpp @@ -73,45 +73,52 @@ class ContiguousInternalMemoryAlgorithmDataFacade : public datafacade::Algor unsigned GetNumberOfEdges() const override final { return m_query_graph.GetNumberOfEdges(); } - unsigned GetOutDegree(const NodeID n) const override final + unsigned GetOutDegree(const NodeID edge_based_node_id) const override final { - return m_query_graph.GetOutDegree(n); + return m_query_graph.GetOutDegree(edge_based_node_id); } - NodeID GetTarget(const EdgeID e) const override final { return m_query_graph.GetTarget(e); } - - const EdgeData &GetEdgeData(const EdgeID e) const override final + NodeID GetTarget(const EdgeID edge_based_edge_id) const override final { - return m_query_graph.GetEdgeData(e); + return m_query_graph.GetTarget(edge_based_edge_id); } - EdgeRange GetAdjacentEdgeRange(const NodeID node) const override final + const EdgeData &GetEdgeData(const EdgeID edge_based_edge_id) const override final { - return m_query_graph.GetAdjacentEdgeRange(node); + return m_query_graph.GetEdgeData(edge_based_edge_id); + } + + EdgeRange GetAdjacentEdgeRange(const NodeID edge_based_node_id) const override final + { + return m_query_graph.GetAdjacentEdgeRange(edge_based_node_id); } // searches for a specific edge - EdgeID FindEdge(const NodeID from, const NodeID to) const override final + EdgeID FindEdge(const NodeID edge_based_node_from, + const NodeID edge_based_node_to) const override final { - return m_query_graph.FindEdge(from, to); + return m_query_graph.FindEdge(edge_based_node_from, edge_based_node_to); } - EdgeID FindEdgeInEitherDirection(const NodeID from, const NodeID to) const override final + EdgeID FindEdgeInEitherDirection(const NodeID edge_based_node_from, + const NodeID edge_based_node_to) const override final { - return m_query_graph.FindEdgeInEitherDirection(from, to); + return m_query_graph.FindEdgeInEitherDirection(edge_based_node_from, edge_based_node_to); } - EdgeID - FindEdgeIndicateIfReverse(const NodeID from, const NodeID to, bool &result) const override final + EdgeID FindEdgeIndicateIfReverse(const NodeID edge_based_node_from, + const NodeID edge_based_node_to, + bool &result) const override final { - return m_query_graph.FindEdgeIndicateIfReverse(from, to, result); + return m_query_graph.FindEdgeIndicateIfReverse( + edge_based_node_from, edge_based_node_to, result); } - EdgeID FindSmallestEdge(const NodeID from, - const NodeID to, + EdgeID FindSmallestEdge(const NodeID edge_based_node_from, + const NodeID edge_based_node_to, std::function filter) const override final { - return m_query_graph.FindSmallestEdge(from, to, filter); + return m_query_graph.FindSmallestEdge(edge_based_node_from, edge_based_node_to, filter); } }; @@ -126,11 +133,9 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade { private: using super = BaseDataFacade; - using IndexBlock = util::RangeTable<16, storage::Ownership::View>::BlockT; using RTreeLeaf = super::RTreeLeaf; using SharedRTree = util::StaticRTree; using SharedGeospatialQuery = GeospatialQuery; - using RTreeNode = SharedRTree::TreeNode; extractor::ClassData exclude_mask; extractor::ProfileProperties *m_profile_properties; @@ -231,76 +236,80 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade } // node and edge information access - util::Coordinate GetCoordinateOfNode(const NodeID id) const override final + util::Coordinate GetCoordinateOfNode(const NodeID node_based_node_id) const override final { - return m_coordinate_list[id]; + return m_coordinate_list[node_based_node_id]; } - OSMNodeID GetOSMNodeIDOfNode(const NodeID id) const override final + OSMNodeID GetOSMNodeIDOfNode(const NodeID node_based_node_id) const override final { - return m_osmnodeid_list[id]; + return m_osmnodeid_list[node_based_node_id]; } - NodeForwardRange GetUncompressedForwardGeometry(const EdgeID id) const override final + NodeForwardRange GetUncompressedForwardGeometry(const PackedGeometryID id) const override final { return segment_data.GetForwardGeometry(id); } - NodeReverseRange GetUncompressedReverseGeometry(const EdgeID id) const override final + NodeReverseRange GetUncompressedReverseGeometry(const PackedGeometryID id) const override final { return segment_data.GetReverseGeometry(id); } - DurationForwardRange GetUncompressedForwardDurations(const EdgeID id) const override final + DurationForwardRange + GetUncompressedForwardDurations(const PackedGeometryID id) const override final { return segment_data.GetForwardDurations(id); } - DurationReverseRange GetUncompressedReverseDurations(const EdgeID id) const override final + DurationReverseRange + GetUncompressedReverseDurations(const PackedGeometryID id) const override final { return segment_data.GetReverseDurations(id); } - WeightForwardRange GetUncompressedForwardWeights(const EdgeID id) const override final + WeightForwardRange GetUncompressedForwardWeights(const PackedGeometryID id) const override final { return segment_data.GetForwardWeights(id); } - WeightReverseRange GetUncompressedReverseWeights(const EdgeID id) const override final + WeightReverseRange GetUncompressedReverseWeights(const PackedGeometryID id) const override final { return segment_data.GetReverseWeights(id); } // Returns the data source ids that were used to supply the edge // weights. - DatasourceForwardRange GetUncompressedForwardDatasources(const EdgeID id) const override final + DatasourceForwardRange + GetUncompressedForwardDatasources(const PackedGeometryID id) const override final { return segment_data.GetForwardDatasources(id); } // Returns the data source ids that were used to supply the edge // weights. - DatasourceReverseRange GetUncompressedReverseDatasources(const EdgeID id) const override final + DatasourceReverseRange + GetUncompressedReverseDatasources(const PackedGeometryID id) const override final { return segment_data.GetReverseDatasources(id); } - TurnPenalty GetWeightPenaltyForEdgeID(const EdgeID id) const override final + TurnPenalty GetWeightPenaltyForEdgeID(const EdgeID edge_based_edge_id) const override final { - BOOST_ASSERT(m_turn_weight_penalties.size() > id); - return m_turn_weight_penalties[id]; + BOOST_ASSERT(m_turn_weight_penalties.size() > edge_based_edge_id); + return m_turn_weight_penalties[edge_based_edge_id]; } - TurnPenalty GetDurationPenaltyForEdgeID(const EdgeID id) const override final + TurnPenalty GetDurationPenaltyForEdgeID(const EdgeID edge_based_edge_id) const override final { - BOOST_ASSERT(m_turn_duration_penalties.size() > id); - return m_turn_duration_penalties[id]; + BOOST_ASSERT(m_turn_duration_penalties.size() > edge_based_edge_id); + return m_turn_duration_penalties[edge_based_edge_id]; } osrm::guidance::TurnInstruction - GetTurnInstructionForEdgeID(const EdgeID id) const override final + GetTurnInstructionForEdgeID(const EdgeID edge_based_edge_id) const override final { - return turn_data.GetTurnInstruction(id); + return turn_data.GetTurnInstruction(edge_based_edge_id); } std::vector GetEdgesInBox(const util::Coordinate south_west, @@ -444,29 +453,29 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade return std::string(m_data_timestamp.begin(), m_data_timestamp.end()); } - GeometryID GetGeometryIndex(const NodeID id) const override final + GeometryID GetGeometryIndex(const NodeID edge_based_node_id) const override final { - return edge_based_node_data.GetGeometryID(id); + return edge_based_node_data.GetGeometryID(edge_based_node_id); } - ComponentID GetComponentID(const NodeID id) const override final + ComponentID GetComponentID(const NodeID edge_based_node_id) const override final { - return edge_based_node_data.GetComponentID(id); + return edge_based_node_data.GetComponentID(edge_based_node_id); } - extractor::TravelMode GetTravelMode(const NodeID id) const override final + extractor::TravelMode GetTravelMode(const NodeID edge_based_node_id) const override final { - return edge_based_node_data.GetTravelMode(id); + return edge_based_node_data.GetTravelMode(edge_based_node_id); } - extractor::ClassData GetClassData(const NodeID id) const override final + extractor::ClassData GetClassData(const NodeID edge_based_node_id) const override final { - return edge_based_node_data.GetClassData(id); + return edge_based_node_data.GetClassData(edge_based_node_id); } - bool ExcludeNode(const NodeID id) const override final + bool ExcludeNode(const NodeID edge_based_node_id) const override final { - return (edge_based_node_data.GetClassData(id) & exclude_mask) > 0; + return (edge_based_node_data.GetClassData(edge_based_node_id) & exclude_mask) > 0; } std::vector GetClasses(const extractor::ClassData class_data) const override final @@ -480,9 +489,9 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade return classes; } - NameID GetNameIndex(const NodeID id) const override final + NameID GetNameIndex(const NodeID edge_based_node_id) const override final { - return edge_based_node_data.GetNameID(id); + return edge_based_node_data.GetNameID(edge_based_node_id); } StringView GetNameForID(const NameID id) const override final @@ -537,32 +546,37 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade return m_profile_properties->GetWeightMultiplier(); } - util::guidance::BearingClass GetBearingClass(const NodeID node) const override final + util::guidance::BearingClass + GetBearingClass(const NodeID node_based_node_id) const override final { - return intersection_bearings_view.GetBearingClass(node); + return intersection_bearings_view.GetBearingClass(node_based_node_id); } - guidance::TurnBearing PreTurnBearing(const EdgeID eid) const override final + guidance::TurnBearing PreTurnBearing(const EdgeID edge_based_edge_id) const override final { - return turn_data.GetPreTurnBearing(eid); + return turn_data.GetPreTurnBearing(edge_based_edge_id); } - guidance::TurnBearing PostTurnBearing(const EdgeID eid) const override final + guidance::TurnBearing PostTurnBearing(const EdgeID edge_based_edge_id) const override final { - return turn_data.GetPostTurnBearing(eid); + return turn_data.GetPostTurnBearing(edge_based_edge_id); } - util::guidance::EntryClass GetEntryClass(const EdgeID turn_id) const override final + util::guidance::EntryClass GetEntryClass(const EdgeID edge_based_edge_id) const override final { - auto entry_class_id = turn_data.GetEntryClassID(turn_id); + auto entry_class_id = turn_data.GetEntryClassID(edge_based_edge_id); return m_entry_class_table.at(entry_class_id); } - bool HasLaneData(const EdgeID id) const override final { return turn_data.HasLaneData(id); } - - util::guidance::LaneTupleIdPair GetLaneData(const EdgeID id) const override final + bool HasLaneData(const EdgeID edge_based_edge_id) const override final { - BOOST_ASSERT(HasLaneData(id)); - return m_lane_tupel_id_pairs.at(turn_data.GetLaneDataID(id)); + return turn_data.HasLaneData(edge_based_edge_id); + } + + util::guidance::LaneTupleIdPair + GetLaneData(const EdgeID edge_based_edge_id) const override final + { + BOOST_ASSERT(HasLaneData(edge_based_edge_id)); + return m_lane_tupel_id_pairs.at(turn_data.GetLaneDataID(edge_based_edge_id)); } extractor::TurnLaneDescription @@ -577,15 +591,15 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade m_lane_description_offsets[lane_description_id + 1]); } - bool IsLeftHandDriving(const NodeID id) const override final + bool IsLeftHandDriving(const NodeID edge_based_node_id) const override final { // TODO: can be moved to a data block indexed by GeometryID - return edge_based_node_data.IsLeftHandDriving(id); + return edge_based_node_data.IsLeftHandDriving(edge_based_node_id); } - bool IsSegregated(const NodeID id) const override final + bool IsSegregated(const NodeID edge_based_node_id) const override final { - return edge_based_node_data.IsSegregated(id); + return edge_based_node_data.IsSegregated(edge_based_node_id); } std::vector @@ -691,57 +705,62 @@ template <> class ContiguousInternalMemoryAlgorithmDataFacade : public Algo unsigned GetNumberOfEdges() const override final { return query_graph.GetNumberOfEdges(); } - unsigned GetOutDegree(const NodeID n) const override final + unsigned GetOutDegree(const NodeID edge_based_node_id) const override final { - return query_graph.GetOutDegree(n); + return query_graph.GetOutDegree(edge_based_node_id); } - EdgeRange GetAdjacentEdgeRange(const NodeID node) const override final + EdgeRange GetAdjacentEdgeRange(const NodeID edge_based_node_id) const override final { - return query_graph.GetAdjacentEdgeRange(node); + return query_graph.GetAdjacentEdgeRange(edge_based_node_id); } - EdgeWeight GetNodeWeight(const NodeID node) const override final + EdgeWeight GetNodeWeight(const NodeID edge_based_node_id) const override final { - return query_graph.GetNodeWeight(node); + return query_graph.GetNodeWeight(edge_based_node_id); } - EdgeDuration GetNodeDuration(const NodeID node) const override final + EdgeDuration GetNodeDuration(const NodeID edge_based_node_id) const override final { - return query_graph.GetNodeDuration(node); + return query_graph.GetNodeDuration(edge_based_node_id); } - EdgeDistance GetNodeDistance(const NodeID node) const override final + EdgeDistance GetNodeDistance(const NodeID edge_based_node_id) const override final { - return query_graph.GetNodeDistance(node); + return query_graph.GetNodeDistance(edge_based_node_id); } - bool IsForwardEdge(const NodeID node) const override final + bool IsForwardEdge(const NodeID edge_based_node_id) const override final { - return query_graph.IsForwardEdge(node); + return query_graph.IsForwardEdge(edge_based_node_id); } - bool IsBackwardEdge(const NodeID node) const override final + bool IsBackwardEdge(const NodeID edge_based_node_id) const override final { - return query_graph.IsBackwardEdge(node); + return query_graph.IsBackwardEdge(edge_based_node_id); } - NodeID GetTarget(const EdgeID e) const override final { return query_graph.GetTarget(e); } - - const EdgeData &GetEdgeData(const EdgeID e) const override final + NodeID GetTarget(const EdgeID edge_based_edge_id) const override final { - return query_graph.GetEdgeData(e); + return query_graph.GetTarget(edge_based_edge_id); } - EdgeRange GetBorderEdgeRange(const LevelID level, const NodeID node) const override final + const EdgeData &GetEdgeData(const EdgeID edge_based_edge_id) const override final { - return query_graph.GetBorderEdgeRange(level, node); + return query_graph.GetEdgeData(edge_based_edge_id); + } + + EdgeRange GetBorderEdgeRange(const LevelID level, + const NodeID edge_based_node_id) const override final + { + return query_graph.GetBorderEdgeRange(level, edge_based_node_id); } // searches for a specific edge - EdgeID FindEdge(const NodeID from, const NodeID to) const override final + EdgeID FindEdge(const NodeID edge_based_node_from, + const NodeID edge_based_node_to) const override final { - return query_graph.FindEdge(from, to); + return query_graph.FindEdge(edge_based_node_from, edge_based_node_to); } }; diff --git a/include/engine/datafacade/datafacade_base.hpp b/include/engine/datafacade/datafacade_base.hpp index b80c93b18..153810fdd 100644 --- a/include/engine/datafacade/datafacade_base.hpp +++ b/include/engine/datafacade/datafacade_base.hpp @@ -77,46 +77,51 @@ class BaseDataFacade virtual std::string GetTimestamp() const = 0; // node and edge information access - virtual util::Coordinate GetCoordinateOfNode(const NodeID id) const = 0; + virtual util::Coordinate GetCoordinateOfNode(const NodeID node_based_node_id) const = 0; - virtual OSMNodeID GetOSMNodeIDOfNode(const NodeID id) const = 0; + virtual OSMNodeID GetOSMNodeIDOfNode(const NodeID node_based_node_id) const = 0; - virtual GeometryID GetGeometryIndex(const NodeID id) const = 0; + virtual GeometryID GetGeometryIndex(const NodeID edge_based_node_id) const = 0; - virtual ComponentID GetComponentID(const NodeID id) const = 0; + virtual ComponentID GetComponentID(const NodeID edge_based_node_id) const = 0; - virtual NodeForwardRange GetUncompressedForwardGeometry(const EdgeID id) const = 0; - virtual NodeReverseRange GetUncompressedReverseGeometry(const EdgeID id) const = 0; + virtual NodeForwardRange GetUncompressedForwardGeometry(const PackedGeometryID id) const = 0; + virtual NodeReverseRange GetUncompressedReverseGeometry(const PackedGeometryID id) const = 0; - virtual TurnPenalty GetWeightPenaltyForEdgeID(const EdgeID id) const = 0; + virtual TurnPenalty GetWeightPenaltyForEdgeID(const EdgeID edge_based_edge_id) const = 0; - virtual TurnPenalty GetDurationPenaltyForEdgeID(const EdgeID id) const = 0; + virtual TurnPenalty GetDurationPenaltyForEdgeID(const EdgeID edge_based_edge_id) const = 0; // Gets the weight values for each segment in an uncompressed geometry. // Should always be 1 shorter than GetUncompressedGeometry - virtual WeightForwardRange GetUncompressedForwardWeights(const EdgeID id) const = 0; - virtual WeightReverseRange GetUncompressedReverseWeights(const EdgeID id) const = 0; + virtual WeightForwardRange GetUncompressedForwardWeights(const PackedGeometryID id) const = 0; + virtual WeightReverseRange GetUncompressedReverseWeights(const PackedGeometryID id) const = 0; // Gets the duration values for each segment in an uncompressed geometry. // Should always be 1 shorter than GetUncompressedGeometry - virtual DurationForwardRange GetUncompressedForwardDurations(const EdgeID id) const = 0; - virtual DurationReverseRange GetUncompressedReverseDurations(const EdgeID id) const = 0; + virtual DurationForwardRange + GetUncompressedForwardDurations(const PackedGeometryID id) const = 0; + virtual DurationReverseRange + GetUncompressedReverseDurations(const PackedGeometryID id) const = 0; // Returns the data source ids that were used to supply the edge // weights. Will return an empty array when only the base profile is used. - virtual DatasourceForwardRange GetUncompressedForwardDatasources(const EdgeID id) const = 0; - virtual DatasourceReverseRange GetUncompressedReverseDatasources(const EdgeID id) const = 0; + virtual DatasourceForwardRange + GetUncompressedForwardDatasources(const PackedGeometryID id) const = 0; + virtual DatasourceReverseRange + GetUncompressedReverseDatasources(const PackedGeometryID id) const = 0; // Gets the name of a datasource virtual StringView GetDatasourceName(const DatasourceID id) const = 0; - virtual osrm::guidance::TurnInstruction GetTurnInstructionForEdgeID(const EdgeID id) const = 0; + virtual osrm::guidance::TurnInstruction + GetTurnInstructionForEdgeID(const EdgeID edge_based_edge_id) const = 0; - virtual extractor::TravelMode GetTravelMode(const NodeID id) const = 0; + virtual extractor::TravelMode GetTravelMode(const NodeID edge_based_node_id) const = 0; - virtual extractor::ClassData GetClassData(const NodeID id) const = 0; + virtual extractor::ClassData GetClassData(const NodeID edge_based_node_id) const = 0; - virtual bool ExcludeNode(const NodeID id) const = 0; + virtual bool ExcludeNode(const NodeID edge_based_node_id) const = 0; virtual std::vector GetClasses(const extractor::ClassData class_data) const = 0; @@ -182,12 +187,12 @@ class BaseDataFacade const Approach approach, const bool use_all_edges = false) const = 0; - virtual bool HasLaneData(const EdgeID id) const = 0; - virtual util::guidance::LaneTupleIdPair GetLaneData(const EdgeID id) const = 0; + virtual bool HasLaneData(const EdgeID edge_based_edge_id) const = 0; + virtual util::guidance::LaneTupleIdPair GetLaneData(const EdgeID edge_based_edge_id) const = 0; virtual extractor::TurnLaneDescription GetTurnDescription(const LaneDescriptionID lane_description_id) const = 0; - virtual NameID GetNameIndex(const NodeID id) const = 0; + virtual NameID GetNameIndex(const NodeID edge_based_node_id) const = 0; virtual StringView GetNameForID(const NameID id) const = 0; @@ -209,16 +214,16 @@ class BaseDataFacade virtual double GetWeightMultiplier() const = 0; - virtual osrm::guidance::TurnBearing PreTurnBearing(const EdgeID eid) const = 0; - virtual osrm::guidance::TurnBearing PostTurnBearing(const EdgeID eid) const = 0; + virtual osrm::guidance::TurnBearing PreTurnBearing(const EdgeID edge_based_edge_id) const = 0; + virtual osrm::guidance::TurnBearing PostTurnBearing(const EdgeID edge_based_edge_id) const = 0; - virtual util::guidance::BearingClass GetBearingClass(const NodeID node) const = 0; + virtual util::guidance::BearingClass GetBearingClass(const NodeID node_based_node_id) const = 0; - virtual util::guidance::EntryClass GetEntryClass(const EdgeID turn_id) const = 0; + virtual util::guidance::EntryClass GetEntryClass(const EdgeID edge_based_edge_id) const = 0; - virtual bool IsLeftHandDriving(const NodeID id) const = 0; + virtual bool IsLeftHandDriving(const NodeID edge_based_node_id) const = 0; - virtual bool IsSegregated(const NodeID) const = 0; + virtual bool IsSegregated(const NodeID edge_based_node_id) const = 0; virtual std::vector GetOverridesThatStartAt(const NodeID edge_based_node_id) const = 0; diff --git a/include/util/typedefs.hpp b/include/util/typedefs.hpp index 9868ee2ff..b1e962e2e 100644 --- a/include/util/typedefs.hpp +++ b/include/util/typedefs.hpp @@ -76,13 +76,13 @@ using NodeID = std::uint32_t; using EdgeID = std::uint32_t; using NameID = std::uint32_t; using AnnotationID = std::uint32_t; +using PackedGeometryID = std::uint32_t; using EdgeWeight = std::int32_t; using EdgeDuration = std::int32_t; using EdgeDistance = float; using SegmentWeight = std::uint32_t; using SegmentDuration = std::uint32_t; using TurnPenalty = std::int16_t; // turn penalty in 100ms units -using DataTimestamp = std::string; static const std::size_t INVALID_INDEX = std::numeric_limits::max(); @@ -95,16 +95,13 @@ static const LaneDescriptionID INVALID_LANE_DESCRIPTIONID = std::numeric_limits::max(); using BearingClassID = std::uint32_t; -static const BearingClassID INVALID_BEARING_CLASSID = std::numeric_limits::max(); - using DiscreteBearing = std::uint16_t; - using EntryClassID = std::uint16_t; -static const EntryClassID INVALID_ENTRY_CLASSID = std::numeric_limits::max(); static const NodeID SPECIAL_NODEID = std::numeric_limits::max(); static const NodeID SPECIAL_SEGMENTID = std::numeric_limits::max() >> 1; -static const NodeID SPECIAL_GEOMETRYID = std::numeric_limits::max() >> 1; +static const PackedGeometryID SPECIAL_GEOMETRYID = + std::numeric_limits::max() >> 1; static const EdgeID SPECIAL_EDGEID = std::numeric_limits::max(); static const RestrictionID SPECIAL_RESTRICTIONID = std::numeric_limits::max(); static const NameID INVALID_NAMEID = std::numeric_limits::max(); @@ -123,13 +120,6 @@ static const TurnPenalty INVALID_TURN_PENALTY = std::numeric_limits static const EdgeDistance INVALID_EDGE_DISTANCE = std::numeric_limits::max(); static const EdgeDistance INVALID_FALLBACK_SPEED = std::numeric_limits::max(); -// FIXME the bitfields we use require a reduced maximal duration, this should be kept consistent -// within the code base. For now we have to ensure that we don't case 30 bit to -1 and break any -// min() / operator< checks due to the invalid truncation. In addition, using signed and unsigned -// weights produces problems. As a result we can only store 1 << 29 since the MSB is still reserved -// for the sign bit. See https://github.com/Project-OSRM/osrm-backend/issues/3677 -static const EdgeWeight MAXIMAL_EDGE_DURATION_INT_30 = (1 << 29) - 1; - using DatasourceID = std::uint8_t; using BisectionID = std::uint32_t; @@ -158,11 +148,11 @@ struct SegmentID */ struct GeometryID { - GeometryID(const NodeID id_, const bool forward_) : id{id_}, forward{forward_} {} + GeometryID(const PackedGeometryID id_, const bool forward_) : id{id_}, forward{forward_} {} GeometryID() : id(std::numeric_limits::max() >> 1), forward(false) {} - NodeID id : 31; + PackedGeometryID id : 31; std::uint32_t forward : 1; };