diff --git a/src/mbgl/layout/pattern_layout.hpp b/src/mbgl/layout/pattern_layout.hpp index af28c1b92..c8e362218 100644 --- a/src/mbgl/layout/pattern_layout.hpp +++ b/src/mbgl/layout/pattern_layout.hpp @@ -1,5 +1,4 @@ #pragma once -#include #include #include #include @@ -18,25 +17,33 @@ public: std::string max; }; -using PatternLayerMap = std::map; +using PatternLayerMap = mbgl::unordered_map; class PatternFeature { public: PatternFeature(std::size_t i_, - std::unique_ptr feature_, - PatternLayerMap patterns_, + std::unique_ptr&& feature_, + PatternLayerMap&& patterns_, float sortKey_ = 0.0f) : i(i_), feature(std::move(feature_)), - patterns(std::move(patterns_)), - sortKey(sortKey_) {} + sortKey(sortKey_), + patterns(std::make_unique(std::move(patterns_))) {} + PatternFeature(const PatternFeature&) = delete; + PatternFeature(PatternFeature&&) = default; + PatternFeature& operator=(const PatternFeature&) = delete; + PatternFeature& operator=(PatternFeature&&) = default; + + const PatternLayerMap& getPatterns() const { return *patterns; } friend bool operator<(const PatternFeature& lhs, const PatternFeature& rhs) { return lhs.sortKey < rhs.sortKey; } std::size_t i; std::unique_ptr feature; - PatternLayerMap patterns; float sortKey; + +protected: + std::unique_ptr patterns; }; template @@ -182,7 +189,7 @@ public: for (auto& patternFeature : features) { const auto i = patternFeature.i; std::unique_ptr feature = std::move(patternFeature.feature); - const PatternLayerMap& patterns = patternFeature.patterns; + const PatternLayerMap& patterns = patternFeature.getPatterns(); const GeometryCollection& geometries = feature->getGeometries(); bucket->addFeature(*feature, geometries, patternPositions, patterns, i, canonical); diff --git a/src/mbgl/renderer/bucket.hpp b/src/mbgl/renderer/bucket.hpp index 940ef2093..11e2d214a 100644 --- a/src/mbgl/renderer/bucket.hpp +++ b/src/mbgl/renderer/bucket.hpp @@ -19,7 +19,7 @@ class RenderLayer; class CrossTileSymbolLayerIndex; class OverscaledTileID; class PatternDependency; -using PatternLayerMap = std::map; +using PatternLayerMap = mbgl::unordered_map; class Placement; class TransformState; class BucketPlacementData;