diff --git a/geometry/covering.hpp b/geometry/covering.hpp index f7fd6869af..52c6551da9 100644 --- a/geometry/covering.hpp +++ b/geometry/covering.hpp @@ -2,11 +2,10 @@ #include "../geometry/point2d.hpp" #include "../base/assert.hpp" #include "../base/base.hpp" +#include "../base/buffer_vector.hpp" #include "../base/logging.hpp" #include "../base/math.hpp" #include "../std/algorithm.hpp" -#include "../std/utility.hpp" -#include "../std/vector.hpp" namespace covering { @@ -60,9 +59,9 @@ CellObjectIntersection IntersectCellWithTriangle( return i1; } -template -void CoverObject(IntersectF const & intersect, uint64_t cellPenaltyArea, vector & out, - CellIdT cell = CellIdT::Root()) +template +void CoverObject(IntersectF const & intersect, uint64_t cellPenaltyArea, CellIdContainerT & out, + CellIdT cell) { uint64_t const cellArea = my::sq(uint64_t(1 << (CellIdT::DEPTH_LEVELS - 1 - cell.Level()))); CellObjectIntersection const intersection = intersect(cell); @@ -77,22 +76,21 @@ void CoverObject(IntersectF const & intersect, uint64_t cellPenaltyArea, vector< return; } - vector subdiv; + buffer_vector subdiv; for (uint8_t i = 0; i < 4; ++i) CoverObject(intersect, cellPenaltyArea, subdiv, cell.Child(i)); - uint64_t subdivArea = 0; for (size_t i = 0; i < subdiv.size(); ++i) subdivArea += my::sq(uint64_t(1 << (CellIdT::DEPTH_LEVELS - 1 - subdiv[i].Level()))); ASSERT(!subdiv.empty(), (cellPenaltyArea, out, cell)); - if (subdiv.empty() || - cellPenaltyArea * (int(subdiv.size()) - 1) >= cellArea - subdivArea) + if (subdiv.empty() || cellPenaltyArea * (int(subdiv.size()) - 1) >= cellArea - subdivArea) out.push_back(cell); else - out.insert(out.end(), subdiv.begin(), subdiv.end()); + for (size_t i = 0; i < subdiv.size(); ++i) + out.push_back(subdiv[i]); } diff --git a/indexer/covering.cpp b/indexer/covering.cpp index 9d61007bc1..f5bd3cac8e 100644 --- a/indexer/covering.cpp +++ b/indexer/covering.cpp @@ -7,6 +7,7 @@ #include "../base/stl_add.hpp" #include "../std/algorithm.hpp" #include "../std/bind.hpp" +#include "../std/vector.hpp" namespace { @@ -75,7 +76,7 @@ vector covering::CoverFeature(FeatureType const & f, } vector cells; - covering::CoverObject(featureIntersector, cellPenaltyAreaPerNode, cells); + covering::CoverObject(featureIntersector, cellPenaltyAreaPerNode, cells, RectId::Root()); vector res(cells.size()); for (size_t i = 0; i < cells.size(); ++i)