osrm-backend/include/engine/datafacade/datafacade_base.hpp

181 lines
7.1 KiB
C++
Raw Normal View History

#ifndef DATAFACADE_BASE_HPP
#define DATAFACADE_BASE_HPP
// Exposes all data access interfaces to the algorithms via base class ptr
2016-01-28 10:28:44 -05:00
#include "contractor/query_edge.hpp"
#include "extractor/edge_based_node.hpp"
#include "extractor/external_memory_node.hpp"
2016-03-01 16:30:31 -05:00
#include "extractor/guidance/turn_instruction.hpp"
#include "extractor/guidance/turn_lane_types.hpp"
2016-05-27 15:05:04 -04:00
#include "engine/phantom_node.hpp"
2016-01-28 08:27:05 -05:00
#include "util/exception.hpp"
#include "util/guidance/bearing_class.hpp"
#include "util/guidance/entry_class.hpp"
#include "util/integer_range.hpp"
2016-01-02 11:13:44 -05:00
#include "util/string_util.hpp"
#include "util/typedefs.hpp"
#include "osrm/coordinate.hpp"
2016-02-05 08:58:06 -05:00
#include <cstddef>
#include <string>
#include <utility>
#include <vector>
2016-01-05 10:51:13 -05:00
namespace osrm
{
namespace engine
{
namespace datafacade
{
using EdgeRange = util::range<EdgeID>;
2016-01-28 10:28:44 -05:00
class BaseDataFacade
{
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;
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;
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
virtual util::Coordinate GetCoordinateOfNode(const unsigned id) const = 0;
2016-05-18 16:09:14 -04:00
virtual OSMNodeID GetOSMNodeIDOfNode(const unsigned id) const = 0;
virtual unsigned GetGeometryIndexForEdgeID(const unsigned id) const = 0;
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;
// 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 void GetUncompressedDatasources(const EdgeID id,
std::vector<uint8_t> &data_sources) const = 0;
// Gets the name of a datasource
virtual std::string GetDatasourceName(const uint8_t datasource_name_id) const = 0;
2016-03-03 09:36:03 -05:00
virtual extractor::guidance::TurnInstruction
GetTurnInstructionForEdgeID(const unsigned id) const = 0;
2016-01-05 10:51:13 -05:00
virtual extractor::TravelMode GetTravelModeForEdgeID(const unsigned id) const = 0;
virtual std::vector<RTreeLeaf> GetEdgesInBox(const util::Coordinate south_west,
2016-05-06 20:56:08 -04:00
const util::Coordinate north_east) const = 0;
2015-12-09 16:34:22 -05:00
virtual std::vector<PhantomNodeWithDistance>
NearestPhantomNodesInRange(const util::Coordinate input_coordinate,
const float max_distance,
const int bearing,
2016-05-06 20:56:08 -04:00
const int bearing_range) const = 0;
virtual std::vector<PhantomNodeWithDistance>
NearestPhantomNodesInRange(const util::Coordinate input_coordinate,
2016-05-06 20:56:08 -04:00
const float max_distance) const = 0;
2015-12-09 16:34:22 -05:00
virtual std::vector<PhantomNodeWithDistance>
NearestPhantomNodes(const util::Coordinate input_coordinate,
const unsigned max_results,
2016-02-22 18:44:35 -05:00
const double max_distance,
const int bearing,
2016-05-06 20:56:08 -04:00
const int bearing_range) const = 0;
2016-02-22 18:44:35 -05:00
virtual std::vector<PhantomNodeWithDistance>
NearestPhantomNodes(const util::Coordinate input_coordinate,
2016-02-22 18:44:35 -05:00
const unsigned max_results,
const int bearing,
2016-05-06 20:56:08 -04:00
const int bearing_range) const = 0;
2016-02-22 18:44:35 -05:00
virtual std::vector<PhantomNodeWithDistance>
2016-05-27 15:05:04 -04:00
NearestPhantomNodes(const util::Coordinate input_coordinate,
const unsigned max_results) const = 0;
2016-02-22 18:44:35 -05:00
virtual std::vector<PhantomNodeWithDistance>
NearestPhantomNodes(const util::Coordinate input_coordinate,
const unsigned max_results,
2016-05-06 20:56:08 -04:00
const double max_distance) const = 0;
2016-05-27 15:05:04 -04:00
virtual std::pair<PhantomNode, PhantomNode> NearestPhantomNodeWithAlternativeFromBigComponent(
const util::Coordinate input_coordinate) const = 0;
virtual std::pair<PhantomNode, PhantomNode>
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate input_coordinate,
2016-05-06 20:56:08 -04:00
const double max_distance) const = 0;
virtual std::pair<PhantomNode, PhantomNode>
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate input_coordinate,
const double max_distance,
const int bearing,
2016-05-06 20:56:08 -04:00
const int bearing_range) const = 0;
2016-05-27 15:05:04 -04:00
virtual std::pair<PhantomNode, PhantomNode>
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate input_coordinate,
const int bearing,
const int bearing_range) const = 0;
2014-09-23 12:46:14 -04:00
2016-06-15 08:38:24 -04:00
virtual bool hasLaneData(const EdgeID id) const = 0;
virtual util::guidance::LaneTupelIdPair GetLaneData(const EdgeID id) const = 0;
virtual extractor::guidance::TurnLaneDescription
GetTurnDescription(const LaneDescriptionID lane_description_id) const = 0;
2016-06-15 08:38:24 -04:00
virtual unsigned GetCheckSum() const = 0;
virtual bool IsCoreNode(const NodeID id) const = 0;
virtual unsigned GetNameIndexFromEdgeID(const unsigned id) const = 0;
2016-03-18 14:21:13 -04:00
virtual std::string GetNameForID(const unsigned name_id) const = 0;
2016-09-05 09:01:51 -04:00
virtual std::string GetRefForID(const unsigned name_id) const = 0;
virtual std::string GetPronunciationForID(const unsigned name_id) const = 0;
2016-05-26 18:47:46 -04:00
virtual std::string GetDestinationsForID(const unsigned name_id) const = 0;
2015-11-25 15:45:09 -05:00
virtual std::size_t GetCoreSize() const = 0;
virtual std::string GetTimestamp() const = 0;
2016-04-12 12:47:00 -04:00
virtual bool GetContinueStraightDefault() const = 0;
virtual BearingClassID GetBearingClassID(const NodeID id) const = 0;
virtual util::guidance::BearingClass
GetBearingClass(const BearingClassID bearing_class_id) const = 0;
virtual EntryClassID GetEntryClassID(const EdgeID eid) const = 0;
virtual util::guidance::EntryClass GetEntryClass(const EntryClassID entry_class_id) const = 0;
};
2016-01-05 10:51:13 -05:00
}
}
}
#endif // DATAFACADE_BASE_HPP