Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortatiana-yan <tatiana.kondakova@gmail.com>2021-03-09 16:28:26 +0300
committerOlga Khlopkova <mesozoic.drones@gmail.com>2021-03-10 12:18:41 +0300
commitf8935645f44eae12f1cbd6f78f9a548a2770b1ca (patch)
treefc52d878d6d6afd5c8a299647af8c3efc49a9716
parente2aee58abf373010263ad61da26bda84bdc5eefe (diff)
[transit] Fail if all shapes are invalid.
-rw-r--r--transit/world_feed/world_feed.cpp20
-rw-r--r--transit/world_feed/world_feed.hpp5
2 files changed, 16 insertions, 9 deletions
diff --git a/transit/world_feed/world_feed.cpp b/transit/world_feed/world_feed.cpp
index 114e95da9d..678512c993 100644
--- a/transit/world_feed/world_feed.cpp
+++ b/transit/world_feed/world_feed.cpp
@@ -1041,10 +1041,11 @@ std::unordered_map<TransitId, std::vector<StopsOnLines>> WorldFeed::GetStopsForS
return stopsOnShapes;
}
-size_t WorldFeed::ModifyShapes()
+std::pair<size_t, size_t> WorldFeed::ModifyShapes()
{
auto stopsOnShapes = GetStopsForShapeMatching();
size_t invalidStopSequences = 0;
+ size_t validStopSequences = 0;
for (auto & [shapeId, stopsLists] : stopsOnShapes)
{
@@ -1070,9 +1071,13 @@ size_t WorldFeed::ModifyShapes()
stopsOnLines.m_isValid = false;
++invalidStopSequences;
}
+ else
+ {
+ ++validStopSequences;
+ }
if (invalidStopSequences > kMaxInvalidShapesCount)
- return invalidStopSequences;
+ return {invalidStopSequences, validStopSequences};
}
for (auto & stopsOnLines : stopsLists)
@@ -1087,13 +1092,14 @@ size_t WorldFeed::ModifyShapes()
for (size_t i = 0; i < stopIds.size() - 1; ++i)
{
auto const stops = GetStopPairOnShape(indexes, stopsOnLines, i, lastIndex, direction);
- if (!stops)
+ if (!stops && stopsOnLines.m_isValid)
{
stopsOnLines.m_isValid = false;
++invalidStopSequences;
+ --validStopSequences;
if (invalidStopSequences > kMaxInvalidShapesCount)
- return invalidStopSequences;
+ return {invalidStopSequences, validStopSequences};
}
auto const [stop1, stop2] = *stops;
lastIndex = stop2.m_index;
@@ -1125,7 +1131,7 @@ size_t WorldFeed::ModifyShapes()
}
}
- return invalidStopSequences;
+ return {invalidStopSequences, validStopSequences};
}
void WorldFeed::FillTransfers()
@@ -1467,10 +1473,10 @@ bool WorldFeed::SetFeed(gtfs::Feed && feed)
}
LOG(LINFO, ("Filled stop timetables and road graph edges."));
- size_t const badShapesCount = ModifyShapes();
+ auto const [badShapesCount, goodShapesCount] = ModifyShapes();
LOG(LINFO, ("Modified shapes."));
- if (badShapesCount > kMaxInvalidShapesCount)
+ if (badShapesCount > kMaxInvalidShapesCount || (goodShapesCount == 0 && badShapesCount > 0))
{
LOG(LINFO, ("Corrupted shapes count exceeds allowable limit."));
return false;
diff --git a/transit/world_feed/world_feed.hpp b/transit/world_feed/world_feed.hpp
index 4d20c24087..2fdd99cd0c 100644
--- a/transit/world_feed/world_feed.hpp
+++ b/transit/world_feed/world_feed.hpp
@@ -328,8 +328,9 @@ private:
std::unordered_map<TransitId, std::vector<StopsOnLines>> GetStopsForShapeMatching();
- // Adds stops projections to shapes. Updates corresponding links to shapes.
- size_t ModifyShapes();
+ // Adds stops projections to shapes. Updates corresponding links to shapes. Returns number of
+ // invalid and valid shapes.
+ std::pair<size_t, size_t> ModifyShapes();
// Fills transfers based on GTFS transfers.
void FillTransfers();
// Fills gates based on GTFS stops.