2017-01-09 15:40:33 -05:00
|
|
|
#ifndef OSRM_ENGINE_DATAFACADE_ALGORITHM_DATAFACADE_HPP
|
|
|
|
#define OSRM_ENGINE_DATAFACADE_ALGORITHM_DATAFACADE_HPP
|
|
|
|
|
|
|
|
#include "contractor/query_edge.hpp"
|
2018-04-23 00:01:09 -04:00
|
|
|
#include "customizer/edge_based_graph.hpp"
|
2017-03-06 17:00:11 -05:00
|
|
|
#include "extractor/edge_based_edge.hpp"
|
2017-01-09 15:40:33 -05:00
|
|
|
#include "engine/algorithm.hpp"
|
2017-03-04 13:54:06 -05:00
|
|
|
|
2018-02-01 10:47:43 -05:00
|
|
|
#include "partitioner/cell_storage.hpp"
|
|
|
|
#include "partitioner/multi_level_partition.hpp"
|
2017-03-04 13:54:06 -05:00
|
|
|
|
2017-08-20 19:24:05 -04:00
|
|
|
#include "util/filtered_graph.hpp"
|
2017-01-09 15:40:33 -05:00
|
|
|
#include "util/integer_range.hpp"
|
|
|
|
|
2022-12-11 04:10:26 -05:00
|
|
|
namespace osrm::engine::datafacade
|
2017-01-09 15:40:33 -05:00
|
|
|
{
|
|
|
|
|
2017-03-31 06:52:04 -04:00
|
|
|
// Namespace local aliases for algorithms
|
|
|
|
using CH = routing_algorithms::ch::Algorithm;
|
|
|
|
using MLD = routing_algorithms::mld::Algorithm;
|
|
|
|
|
2017-01-09 15:40:33 -05:00
|
|
|
template <typename AlgorithmT> class AlgorithmDataFacade;
|
|
|
|
|
2017-03-31 06:52:04 -04:00
|
|
|
template <> class AlgorithmDataFacade<CH>
|
2017-01-09 15:40:33 -05:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
using EdgeData = contractor::QueryEdge::EdgeData;
|
2017-08-20 19:24:05 -04:00
|
|
|
using EdgeRange = util::filtered_range<EdgeID, util::vector_view<bool>>;
|
2017-01-09 15:40:33 -05:00
|
|
|
|
2022-08-31 17:39:47 -04:00
|
|
|
virtual ~AlgorithmDataFacade() = default;
|
|
|
|
|
2017-01-09 15:40:33 -05:00
|
|
|
// search graph access
|
|
|
|
virtual unsigned GetNumberOfNodes() const = 0;
|
|
|
|
|
|
|
|
virtual unsigned GetNumberOfEdges() const = 0;
|
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual unsigned GetOutDegree(const NodeID edge_based_node_id) const = 0;
|
2017-01-09 15:40:33 -05:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual NodeID GetTarget(const EdgeID edge_based_edge_id) const = 0;
|
2017-01-09 15:40:33 -05:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual const EdgeData &GetEdgeData(const EdgeID edge_based_edge_id) const = 0;
|
2017-01-09 15:40:33 -05:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeRange GetAdjacentEdgeRange(const NodeID edge_based_node_id) const = 0;
|
2017-01-09 15:40:33 -05:00
|
|
|
|
|
|
|
// searches for a specific edge
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeID FindEdge(const NodeID edge_based_node_from,
|
|
|
|
const NodeID edge_based_node_to) const = 0;
|
2017-01-09 15:40:33 -05:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeID FindEdgeInEitherDirection(const NodeID edge_based_node_from,
|
|
|
|
const NodeID edge_based_node_to) const = 0;
|
2017-01-09 15:40:33 -05:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeID FindEdgeIndicateIfReverse(const NodeID edge_based_node_from,
|
|
|
|
const NodeID edge_based_node_to,
|
|
|
|
bool &result) const = 0;
|
2017-01-09 15:40:33 -05:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeID FindSmallestEdge(const NodeID edge_based_node_from,
|
|
|
|
const NodeID edge_based_node_to,
|
2024-05-23 12:51:51 -04:00
|
|
|
const std::function<bool(const EdgeData &)> &filter) const = 0;
|
2017-01-09 15:40:33 -05:00
|
|
|
};
|
2017-03-01 17:55:18 -05:00
|
|
|
|
2017-03-31 06:52:04 -04:00
|
|
|
template <> class AlgorithmDataFacade<MLD>
|
2017-03-01 17:55:18 -05:00
|
|
|
{
|
|
|
|
public:
|
2018-04-23 00:01:09 -04:00
|
|
|
using EdgeData = customizer::EdgeBasedGraphEdgeData;
|
2017-08-20 19:24:05 -04:00
|
|
|
using EdgeRange = util::range<EdgeID>;
|
2017-03-06 17:00:11 -05:00
|
|
|
|
2022-08-31 17:39:47 -04:00
|
|
|
virtual ~AlgorithmDataFacade() = default;
|
|
|
|
|
2017-03-06 17:00:11 -05:00
|
|
|
// search graph access
|
|
|
|
virtual unsigned GetNumberOfNodes() const = 0;
|
|
|
|
|
2018-04-08 12:37:08 -04:00
|
|
|
virtual unsigned GetMaxBorderNodeID() const = 0;
|
|
|
|
|
2017-03-06 17:00:11 -05:00
|
|
|
virtual unsigned GetNumberOfEdges() const = 0;
|
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual unsigned GetOutDegree(const NodeID edge_based_node_id) const = 0;
|
2017-03-06 17:00:11 -05:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeRange GetAdjacentEdgeRange(const NodeID edge_based_node_id) const = 0;
|
2018-04-22 02:34:31 -04:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeWeight GetNodeWeight(const NodeID edge_based_node_id) const = 0;
|
2018-04-22 02:34:31 -04:00
|
|
|
|
2022-10-28 10:16:12 -04:00
|
|
|
virtual EdgeDuration
|
2021-06-01 15:48:12 -04:00
|
|
|
GetNodeDuration(const NodeID edge_based_node_id) const = 0; // TODO: to be removed
|
2018-04-22 02:34:31 -04:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeDistance GetNodeDistance(const NodeID edge_based_node_id) const = 0;
|
2018-10-30 00:47:49 -04:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual bool IsForwardEdge(EdgeID edge_based_edge_id) const = 0;
|
2018-04-23 00:01:09 -04:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual bool IsBackwardEdge(EdgeID edge_based_edge_id) const = 0;
|
2018-04-23 00:01:09 -04:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual NodeID GetTarget(const EdgeID edge_based_edge_id) const = 0;
|
2017-03-06 17:00:11 -05:00
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual const EdgeData &GetEdgeData(const EdgeID edge_based_edge_id) const = 0;
|
2017-03-06 17:00:11 -05:00
|
|
|
|
2018-02-01 10:47:43 -05:00
|
|
|
virtual const partitioner::MultiLevelPartitionView &GetMultiLevelPartition() const = 0;
|
2017-03-01 17:55:18 -05:00
|
|
|
|
2018-02-01 10:47:43 -05:00
|
|
|
virtual const partitioner::CellStorageView &GetCellStorage() const = 0;
|
2017-03-15 09:36:41 -04:00
|
|
|
|
2017-07-24 20:05:15 -04:00
|
|
|
virtual const customizer::CellMetricView &GetCellMetric() const = 0;
|
|
|
|
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeRange GetBorderEdgeRange(const LevelID level,
|
|
|
|
const NodeID edge_based_node_id) const = 0;
|
2017-03-06 22:59:28 -05:00
|
|
|
|
2017-03-15 09:36:41 -04:00
|
|
|
// searches for a specific edge
|
2021-06-01 15:48:12 -04:00
|
|
|
virtual EdgeID FindEdge(const NodeID edge_based_node_from,
|
|
|
|
const NodeID edge_based_node_to) const = 0;
|
2017-03-01 17:55:18 -05:00
|
|
|
};
|
2022-12-20 12:00:11 -05:00
|
|
|
} // namespace osrm::engine::datafacade
|
2017-01-09 15:40:33 -05:00
|
|
|
|
|
|
|
#endif
|