From 46a6d089b741482ddf6e4056af17a243d9f0b275 Mon Sep 17 00:00:00 2001 From: Maxim Pimenov Date: Fri, 10 Apr 2015 22:33:33 +0300 Subject: [PATCH] [routing] Support cancelling of route search requests. --- routing/astar_router.cpp | 14 ++++++++++++-- routing/dijkstra_router.cpp | 12 ++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/routing/astar_router.cpp b/routing/astar_router.cpp index ebe02078e4..592bc8a191 100644 --- a/routing/astar_router.cpp +++ b/routing/astar_router.cpp @@ -8,8 +8,9 @@ namespace routing { -static double const kMaxSpeedMPS = 5000.0 / 3600; -static double const kEpsilon = 1e-6; +double const kMaxSpeedMPS = 5000.0 / 3600; +double const kEpsilon = 1e-6; +int const kCancelledPollPeriod = 100; namespace { @@ -117,8 +118,17 @@ IRouter::ResultCode AStarRouter::CalculateRouteM2M(vector const & start queue.push(Vertex(rp, 0.0)); } + int steps = 0; + while (!queue.empty()) { + ++steps; + if (steps % kCancelledPollPeriod == 0) + { + if (IsCancelled()) + return IRouter::Cancelled; + } + Vertex const v = queue.top(); queue.pop(); diff --git a/routing/dijkstra_router.cpp b/routing/dijkstra_router.cpp index dd41186b2b..17dad8baa6 100644 --- a/routing/dijkstra_router.cpp +++ b/routing/dijkstra_router.cpp @@ -10,6 +10,8 @@ namespace routing { +int const kCancelledPollPeriod = 100; + namespace { template @@ -76,10 +78,20 @@ IRouter::ResultCode DijkstraRouter::CalculateRouteM2M(vector const & st for (auto const & p : dist) queue.push(Vertex(p.first, 0.0 /* distance */)); + int steps = 0; + while (!queue.empty()) { + ++steps; + if (steps % kCancelledPollPeriod == 0) + { + if (IsCancelled()) + return IRouter::Cancelled; + } + Vertex const v = queue.top(); queue.pop(); + if (v.dist > dist[v.pos]) continue;