2015-01-27 06:35:29 -05:00
|
|
|
#ifndef DATAFACADE_BASE_HPP
|
|
|
|
#define DATAFACADE_BASE_HPP
|
|
|
|
|
|
|
|
// Exposes all data access interfaces to the algorithms via base class ptr
|
|
|
|
|
2016-01-02 11:13:44 -05:00
|
|
|
#include "extractor/edge_based_node.hpp"
|
|
|
|
#include "extractor/external_memory_node.hpp"
|
2016-01-28 10:28:44 -05:00
|
|
|
#include "contractor/query_edge.hpp"
|
2016-01-02 11:13:44 -05:00
|
|
|
#include "engine/phantom_node.hpp"
|
2016-03-01 16:30:31 -05:00
|
|
|
#include "extractor/guidance/turn_instruction.hpp"
|
2016-01-02 11:13:44 -05:00
|
|
|
#include "util/integer_range.hpp"
|
2016-01-28 08:27:05 -05:00
|
|
|
#include "util/exception.hpp"
|
2016-01-02 11:13:44 -05:00
|
|
|
#include "util/string_util.hpp"
|
|
|
|
#include "util/typedefs.hpp"
|
|
|
|
|
|
|
|
#include "osrm/coordinate.hpp"
|
2015-01-27 06:35:29 -05:00
|
|
|
|
2016-02-05 08:58:06 -05:00
|
|
|
#include <cstddef>
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
#include <utility>
|
2015-01-27 06:35:29 -05:00
|
|
|
#include <string>
|
|
|
|
|
2016-01-05 10:51:13 -05:00
|
|
|
namespace osrm
|
|
|
|
{
|
|
|
|
namespace engine
|
|
|
|
{
|
|
|
|
namespace datafacade
|
|
|
|
{
|
|
|
|
|
|
|
|
using EdgeRange = util::range<EdgeID>;
|
2015-01-27 06:35:29 -05:00
|
|
|
|
2016-01-28 10:28:44 -05:00
|
|
|
class BaseDataFacade
|
2015-01-27 06:35:29 -05:00
|
|
|
{
|
|
|
|
public:
|
2016-01-28 10:28:44 -05:00
|
|
|
using EdgeData = contractor::QueryEdge::EdgeData;
|
2016-01-05 10:51:13 -05:00
|
|
|
using RTreeLeaf = extractor::EdgeBasedNode;
|
2015-01-27 06:35:29 -05:00
|
|
|
BaseDataFacade() {}
|
|
|
|
virtual ~BaseDataFacade() {}
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
2016-01-28 10:28:44 -05:00
|
|
|
virtual const EdgeData &GetEdgeData(const EdgeID e) const = 0;
|
2015-01-27 06:35:29 -05:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
// node and edge information access
|
2016-02-23 15:23:13 -05:00
|
|
|
virtual util::Coordinate GetCoordinateOfNode(const unsigned id) const = 0;
|
2015-01-27 06:35:29 -05:00
|
|
|
|
|
|
|
virtual unsigned GetGeometryIndexForEdgeID(const unsigned id) const = 0;
|
|
|
|
|
2016-01-29 20:52:20 -05:00
|
|
|
virtual void GetUncompressedGeometry(const EdgeID id,
|
|
|
|
std::vector<NodeID> &result_nodes) const = 0;
|
|
|
|
|
|
|
|
// Gets the weight values for each segment in an uncompressed geometry.
|
|
|
|
// Should always be 1 shorter than GetUncompressedGeometry
|
|
|
|
virtual void GetUncompressedWeights(const EdgeID id,
|
2016-03-03 08:26:13 -05:00
|
|
|
std::vector<EdgeWeight> &result_weights) const = 0;
|
2015-01-27 06:35:29 -05:00
|
|
|
|
2016-03-03 09:36:03 -05:00
|
|
|
virtual extractor::guidance::TurnInstruction
|
|
|
|
GetTurnInstructionForEdgeID(const unsigned id) const = 0;
|
2015-01-27 06:35:29 -05:00
|
|
|
|
2016-01-05 10:51:13 -05:00
|
|
|
virtual extractor::TravelMode GetTravelModeForEdgeID(const unsigned id) const = 0;
|
2015-01-27 06:35:29 -05:00
|
|
|
|
2016-02-23 15:23:13 -05:00
|
|
|
virtual std::vector<RTreeLeaf> GetEdgesInBox(const util::Coordinate south_west,
|
|
|
|
const util::Coordinate north_east) = 0;
|
2016-02-16 13:51:04 -05:00
|
|
|
|
2015-12-09 16:34:22 -05:00
|
|
|
virtual std::vector<PhantomNodeWithDistance>
|
2016-02-23 15:23:13 -05:00
|
|
|
NearestPhantomNodesInRange(const util::Coordinate input_coordinate,
|
2015-12-03 14:04:23 -05:00
|
|
|
const float max_distance,
|
2016-02-20 22:27:26 -05:00
|
|
|
const int bearing,
|
|
|
|
const int bearing_range) = 0;
|
|
|
|
virtual std::vector<PhantomNodeWithDistance>
|
2016-02-23 15:23:13 -05:00
|
|
|
NearestPhantomNodesInRange(const util::Coordinate input_coordinate,
|
2016-02-20 22:27:26 -05:00
|
|
|
const float max_distance) = 0;
|
2015-12-03 14:04:23 -05:00
|
|
|
|
2015-12-09 16:34:22 -05:00
|
|
|
virtual std::vector<PhantomNodeWithDistance>
|
2016-02-23 15:23:13 -05:00
|
|
|
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
2015-12-03 14:04:23 -05:00
|
|
|
const unsigned max_results,
|
2016-02-22 18:44:35 -05:00
|
|
|
const double max_distance,
|
|
|
|
const int bearing,
|
|
|
|
const int bearing_range) = 0;
|
|
|
|
virtual std::vector<PhantomNodeWithDistance>
|
2016-02-23 15:23:13 -05:00
|
|
|
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
2016-02-22 18:44:35 -05:00
|
|
|
const unsigned max_results,
|
|
|
|
const int bearing,
|
|
|
|
const int bearing_range) = 0;
|
|
|
|
virtual std::vector<PhantomNodeWithDistance>
|
2016-02-23 15:23:13 -05:00
|
|
|
NearestPhantomNodes(const util::Coordinate input_coordinate, const unsigned max_results) = 0;
|
2016-02-22 18:44:35 -05:00
|
|
|
virtual std::vector<PhantomNodeWithDistance>
|
2016-02-23 15:23:13 -05:00
|
|
|
NearestPhantomNodes(const util::Coordinate input_coordinate,
|
|
|
|
const unsigned max_results,
|
|
|
|
const double max_distance) = 0;
|
|
|
|
|
|
|
|
virtual std::pair<PhantomNode, PhantomNode>
|
|
|
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate input_coordinate) = 0;
|
|
|
|
virtual std::pair<PhantomNode, PhantomNode>
|
|
|
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate input_coordinate,
|
|
|
|
const double max_distance) = 0;
|
|
|
|
virtual std::pair<PhantomNode, PhantomNode>
|
|
|
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate input_coordinate,
|
|
|
|
const double max_distance,
|
|
|
|
const int bearing,
|
|
|
|
const int bearing_range) = 0;
|
2016-01-07 19:31:57 -05:00
|
|
|
virtual std::pair<PhantomNode, PhantomNode> NearestPhantomNodeWithAlternativeFromBigComponent(
|
2016-02-23 15:23:13 -05:00
|
|
|
const util::Coordinate input_coordinate, const int bearing, const int bearing_range) = 0;
|
2014-09-23 12:46:14 -04:00
|
|
|
|
2015-01-27 06:35:29 -05:00
|
|
|
virtual unsigned GetCheckSum() const = 0;
|
|
|
|
|
2015-08-09 12:31:11 -04:00
|
|
|
virtual bool IsCoreNode(const NodeID id) const = 0;
|
|
|
|
|
2015-01-27 06:35:29 -05:00
|
|
|
virtual unsigned GetNameIndexFromEdgeID(const unsigned id) const = 0;
|
|
|
|
|
2015-02-26 04:11:33 -05:00
|
|
|
virtual std::string get_name_for_id(const unsigned name_id) const = 0;
|
2015-01-27 06:35:29 -05:00
|
|
|
|
2015-11-25 15:45:09 -05:00
|
|
|
virtual std::size_t GetCoreSize() const = 0;
|
|
|
|
|
2015-01-27 06:35:29 -05:00
|
|
|
virtual std::string GetTimestamp() const = 0;
|
|
|
|
};
|
2016-01-05 10:51:13 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-01-27 06:35:29 -05:00
|
|
|
#endif // DATAFACADE_BASE_HPP
|