From 6be6263ebf32c45dcbbc2dbe2937422553bc897a Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 15 May 2017 14:18:01 -0700 Subject: [core] Replace inline SpriteAtlas updates with diffing --- src/mbgl/renderer/style_diff.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'src/mbgl/renderer/style_diff.cpp') diff --git a/src/mbgl/renderer/style_diff.cpp b/src/mbgl/renderer/style_diff.cpp index 12000069ea..e2be95432f 100644 --- a/src/mbgl/renderer/style_diff.cpp +++ b/src/mbgl/renderer/style_diff.cpp @@ -6,15 +6,10 @@ namespace mbgl { -template -StyleDifference diff(const std::vector& a, const std::vector& b) { +template +StyleDifference diff(const std::vector& a, const std::vector& b, const Eq& eq) { std::vector lcs; - auto eq = [] (const T& lhs, const T& rhs) { - return std::tie(lhs->id, lhs->type) - == std::tie(rhs->id, rhs->type); - }; - longest_common_subsequence(a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(lcs), eq); auto aIt = a.begin(); @@ -43,14 +38,27 @@ StyleDifference diff(const std::vector& a, const std::vector& b) { return result; } +ImageDifference diffImages(const std::vector& a, + const std::vector& b) { + return diff(a, b, [] (const ImmutableImage& lhs, const ImmutableImage& rhs) { + return lhs->id == rhs->id; + }); +} + SourceDifference diffSources(const std::vector& a, const std::vector& b) { - return diff(a, b); + return diff(a, b, [] (const ImmutableSource& lhs, const ImmutableSource& rhs) { + return std::tie(lhs->id, lhs->type) + == std::tie(rhs->id, rhs->type); + }); } LayerDifference diffLayers(const std::vector& a, const std::vector& b) { - return diff(a, b); + return diff(a, b, [] (const ImmutableLayer& lhs, const ImmutableLayer& rhs) { + return std::tie(lhs->id, lhs->type) + == std::tie(rhs->id, rhs->type); + }); } } // namespace mbgl -- cgit v1.2.1