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"
|
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
|
|
|
|
|
|
|
#include "partition/cell_storage.hpp"
|
2017-03-05 17:57:08 -05:00
|
|
|
#include "partition/multi_level_partition.hpp"
|
2017-03-04 13:54:06 -05:00
|
|
|
|
2017-01-09 15:40:33 -05:00
|
|
|
#include "util/integer_range.hpp"
|
|
|
|
|
|
|
|
namespace osrm
|
|
|
|
{
|
|
|
|
namespace engine
|
|
|
|
{
|
|
|
|
namespace datafacade
|
|
|
|
{
|
|
|
|
|
|
|
|
using EdgeRange = util::range<EdgeID>;
|
|
|
|
|
|
|
|
template <typename AlgorithmT> class AlgorithmDataFacade;
|
|
|
|
|
|
|
|
template <> class AlgorithmDataFacade<algorithm::CH>
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
using EdgeData = contractor::QueryEdge::EdgeData;
|
|
|
|
|
|
|
|
// search graph access
|
|
|
|
virtual unsigned GetNumberOfNodes() const = 0;
|
|
|
|
|
|
|
|
virtual unsigned GetNumberOfEdges() const = 0;
|
|
|
|
|
|
|
|
virtual unsigned GetOutDegree(const NodeID n) const = 0;
|
|
|
|
|
|
|
|
virtual NodeID GetTarget(const EdgeID e) const = 0;
|
|
|
|
|
|
|
|
virtual const EdgeData &GetEdgeData(const EdgeID e) const = 0;
|
|
|
|
|
|
|
|
virtual EdgeID BeginEdges(const NodeID n) const = 0;
|
|
|
|
|
|
|
|
virtual EdgeID EndEdges(const NodeID n) const = 0;
|
|
|
|
|
|
|
|
virtual EdgeRange GetAdjacentEdgeRange(const NodeID node) const = 0;
|
|
|
|
|
|
|
|
// searches for a specific edge
|
|
|
|
virtual EdgeID FindEdge(const NodeID from, const NodeID to) const = 0;
|
|
|
|
|
|
|
|
virtual EdgeID FindEdgeInEitherDirection(const NodeID from, const NodeID to) const = 0;
|
|
|
|
|
|
|
|
virtual EdgeID
|
|
|
|
FindEdgeIndicateIfReverse(const NodeID from, const NodeID to, bool &result) const = 0;
|
|
|
|
|
|
|
|
virtual EdgeID FindSmallestEdge(const NodeID from,
|
|
|
|
const NodeID to,
|
|
|
|
const std::function<bool(EdgeData)> filter) const = 0;
|
2017-02-25 00:13:38 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
template <> class AlgorithmDataFacade<algorithm::CoreCH>
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
using EdgeData = contractor::QueryEdge::EdgeData;
|
2017-01-09 15:40:33 -05:00
|
|
|
|
|
|
|
virtual bool IsCoreNode(const NodeID id) const = 0;
|
|
|
|
};
|
2017-03-01 17:55:18 -05:00
|
|
|
|
|
|
|
template <> class AlgorithmDataFacade<algorithm::MLD>
|
|
|
|
{
|
|
|
|
public:
|
2017-03-06 17:00:11 -05:00
|
|
|
using EdgeData = extractor::EdgeBasedEdge::EdgeData;
|
|
|
|
|
|
|
|
// search graph access
|
|
|
|
virtual unsigned GetNumberOfNodes() const = 0;
|
|
|
|
|
|
|
|
virtual unsigned GetNumberOfEdges() const = 0;
|
|
|
|
|
|
|
|
virtual unsigned GetOutDegree(const NodeID n) const = 0;
|
|
|
|
|
|
|
|
virtual NodeID GetTarget(const EdgeID e) const = 0;
|
|
|
|
|
|
|
|
virtual const EdgeData &GetEdgeData(const EdgeID e) const = 0;
|
|
|
|
|
|
|
|
virtual EdgeID BeginEdges(const NodeID n) const = 0;
|
|
|
|
|
|
|
|
virtual EdgeID EndEdges(const NodeID n) const = 0;
|
|
|
|
|
|
|
|
virtual EdgeRange GetAdjacentEdgeRange(const NodeID node) const = 0;
|
|
|
|
|
2017-03-04 13:54:06 -05:00
|
|
|
virtual const partition::MultiLevelPartitionView &GetMultiLevelPartition() const = 0;
|
2017-03-01 17:55:18 -05:00
|
|
|
|
2017-03-04 13:54:06 -05:00
|
|
|
virtual const partition::CellStorageView &GetCellStorage() const = 0;
|
2017-03-01 17:55:18 -05:00
|
|
|
};
|
2017-01-09 15:40:33 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|