diff options
author | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2016-12-07 10:30:34 +0300 |
---|---|---|
committer | r.kuznetsov <r.kuznetsov@corp.mail.ru> | 2016-12-07 12:47:26 +0300 |
commit | 46b80961c94ddde7aeaaaba988266f557d1a6d06 (patch) | |
tree | eff2e8dad19e1a4e43d6bc798a71f947ff7225f8 /drape_frontend | |
parent | 086c963b37cf7e1834da8faa6feda77f27ec1000 (diff) |
Added preallocation of vectors in RuleDrawer
Diffstat (limited to 'drape_frontend')
-rw-r--r-- | drape_frontend/rule_drawer.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drape_frontend/rule_drawer.cpp b/drape_frontend/rule_drawer.cpp index 5ba75f0d91..f78fcb7086 100644 --- a/drape_frontend/rule_drawer.cpp +++ b/drape_frontend/rule_drawer.cpp @@ -29,6 +29,8 @@ namespace { int constexpr kOutlineMinZoomLevel = 16; + // 10 11 12 13 14 15 16 17 18 19 +vector<size_t> const kAverageSegmentsCount = { 10000, 5000, 10000, 5000, 2500, 5000, 2000, 1000, 500, 500 }; df::BaseApplyFeature::HotelData ExtractHotelData(FeatureType const & f) { @@ -65,7 +67,12 @@ void ExtractTrafficGeometry(FeatureType const & f, df::RoadClass const & roadCla static vector<uint8_t> directions = {traffic::TrafficInfo::RoadSegmentId::kForwardDirection, traffic::TrafficInfo::RoadSegmentId::kReverseDirection}; auto & segments = geometry[f.GetID().m_mwmId]; - segments.reserve(segments.size() + directions.size() * (polyline.GetSize() - 1)); + + int const index = zoomLevel - 10; // 10 - the first zoom level in kAverageSegmentsCount. + ASSERT_GREATER(index, 0, ()); + ASSERT_LESS(index, kAverageSegmentsCount.size(), ()); + segments.reserve(kAverageSegmentsCount[index]); + for (uint16_t segIndex = 0; segIndex + 1 < static_cast<uint16_t>(polyline.GetSize()); ++segIndex) { for (size_t dirIndex = 0; dirIndex < directions.size(); ++dirIndex) |