#pragma once #include "routing/index_graph_starter.hpp" #include "routing/road_graph.hpp" #include "routing/segment.hpp" #include "routing_common/num_mwm_id.hpp" #include "indexer/data_source.hpp" #include #include #include namespace routing { class IndexRoadGraph : public RoadGraphBase { public: IndexRoadGraph(std::shared_ptr numMwmIds, IndexGraphStarter & starter, std::vector const & segments, std::vector const & junctions, DataSourceBase & dataSource); // IRoadGraphBase overrides: virtual void GetOutgoingEdges(Junction const & junction, TEdgeVector & edges) const override; virtual void GetIngoingEdges(Junction const & junction, TEdgeVector & edges) const override; virtual double GetMaxSpeedKMPH() const override; virtual void GetEdgeTypes(Edge const & edge, feature::TypesHolder & types) const override; virtual void GetJunctionTypes(Junction const & junction, feature::TypesHolder & types) const override; virtual void GetRouteEdges(TEdgeVector & edges) const override; virtual void GetRouteSegments(std::vector & segments) const override; private: void GetEdges(Junction const & junction, bool isOutgoing, TEdgeVector & edges) const; std::vector const & GetSegments(Junction const & junction, bool isOutgoing) const; DataSourceBase & m_dataSource; std::shared_ptr m_numMwmIds; IndexGraphStarter & m_starter; std::vector m_segments; std::map> m_beginToSegment; std::map> m_endToSegment; }; } // namespace routing