diff options
author | Добрый Ээх <bukharaev@gmail.com> | 2016-11-24 12:27:18 +0300 |
---|---|---|
committer | Добрый Ээх <bukharaev@gmail.com> | 2016-11-24 20:11:22 +0300 |
commit | eb1c85bce50a6d98fa92b1cec278643b26b59946 (patch) | |
tree | 824cdf2c3530a9aea58c2df51f5bbcb6eb5d527e /routing/geometry.cpp | |
parent | 1d992e43bd6791135fdf02c273f3584e646bb82b (diff) |
Pull request #4672 review fixes
Diffstat (limited to 'routing/geometry.cpp')
-rw-r--r-- | routing/geometry.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/routing/geometry.cpp b/routing/geometry.cpp index 38c3359b0b..218aa0eb03 100644 --- a/routing/geometry.cpp +++ b/routing/geometry.cpp @@ -1,4 +1,6 @@ -#include "geometry.hpp" +#include "routing/geometry.hpp" + +#include "routing/routing_exception.hpp" #include "geometry/mercator.hpp" @@ -36,10 +38,7 @@ void GeometryLoaderImpl::Load(uint32_t featureId, RoadGeometry & road) const FeatureType feature; bool const isFound = m_guard.GetFeatureByIndex(featureId, feature); if (!isFound) - { - LOG(LERROR, ("Feature", featureId, "not found")); - return; - } + MYTHROW(RoutingException, ("Feature", featureId, "not found")); feature.ParseGeometry(FeatureType::BEST_GEOMETRY); road.Load(*m_vehicleModel, feature); @@ -48,6 +47,8 @@ void GeometryLoaderImpl::Load(uint32_t featureId, RoadGeometry & road) const namespace routing { +// RoadGeometry ------------------------------------------------------------------------------------ + RoadGeometry::RoadGeometry(bool oneWay, double speed, Points const & points) : m_isRoad(true), m_isOneWay(oneWay), m_speed(speed), m_points(points) { @@ -64,11 +65,24 @@ void RoadGeometry::Load(IVehicleModel const & vehicleModel, FeatureType const & m_points.emplace_back(feature.GetPoint(i)); } +// Geometry ---------------------------------------------------------------------------------------- + Geometry::Geometry(unique_ptr<GeometryLoader> loader) : m_loader(move(loader)) { ASSERT(m_loader, ()); } +RoadGeometry const & Geometry::GetRoad(uint32_t featureId) const +{ + auto const & it = m_roads.find(featureId); + if (it != m_roads.cend()) + return it->second; + + RoadGeometry & road = m_roads[featureId]; + m_loader->Load(featureId, road); + return road; +} + unique_ptr<GeometryLoader> CreateGeometryLoader(Index const & index, MwmSet::MwmId const & mwmId, shared_ptr<IVehicleModel> vehicleModel) { |