Just return NoSegment in map matching if all candidates are empty

This commit is contained in:
Patrick Niklaus 2016-03-08 22:32:36 +01:00
parent 0ca21dbc91
commit 7e679ab252

View File

@ -47,6 +47,10 @@ void filterCandidates(const std::vector<util::Coordinate> &coordinates,
}
auto &candidates = candidates_lists[current_coordinate];
if (candidates.empty())
{
continue;
}
// sort by forward id, then by reverse id and then by distance
std::sort(
@ -144,11 +148,14 @@ Status MatchPlugin::HandleRequest(const api::MatchParameters &parameters,
auto candidates_lists = GetPhantomNodesInRange(parameters, search_radiuses);
filterCandidates(parameters.coordinates, candidates_lists);
if (candidates_lists.size() != parameters.coordinates.size())
if (std::all_of(candidates_lists.begin(), candidates_lists.end(),
[](const std::vector<PhantomNodeWithDistance> &candidates)
{
return candidates.empty();
}))
{
BOOST_ASSERT(candidates_lists.size() < parameters.coordinates.size());
return Error("NoSegment", std::string("Could not find a matching segment for coordinate ") +
std::to_string(candidates_lists.size()),
return Error("NoSegment",
std::string("Could not find a matching segment for any coordinate."),
json_result);
}