#ifndef GRAPH_H_ #define GRAPH_H_ #include #include #include #include #include "routing_strategy.h" #include "distance_function.h" #include "bounding_box.h" namespace routing { class IGraphNode; class RoutingStrategy; class IGraph { public: virtual ~IGraph() {} virtual const IGraphNode* GetNode(const std::string& name) const = 0; virtual const std::vector& GetNodes() const = 0; virtual BoundingBox GetBoundingBox() const = 0; virtual const IGraphNode* NearestNode(std::vector point, const DistanceFunction& distance) const = 0; virtual const std::vector< std::vector > GetPath(std::vector src, std::vector dest, const RoutingStrategy& strategy) const = 0; }; class IGraphNode { public: virtual ~IGraphNode() {} virtual const std::string& GetName() const = 0; virtual const std::vector& GetNeighbors() const = 0; virtual const std::vector GetPosition() const = 0; }; class GraphBase : public IGraph { public: virtual ~GraphBase() {} BoundingBox GetBoundingBox() const; const IGraphNode* NearestNode(std::vector point, const DistanceFunction& distance) const; const std::vector< std::vector > GetPath(std::vector src, std::vector dest, const RoutingStrategy& strategy) const; }; } #endif