summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/style_diff.cpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-05-15 14:18:01 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-05-30 11:34:13 -0700
commit6be6263ebf32c45dcbbc2dbe2937422553bc897a (patch)
treef12021eb71905a0734378b42b03aeba94e287040 /src/mbgl/renderer/style_diff.cpp
parentfb3cef632d7732fab54f93971d3c8ef4d8291bef (diff)
downloadqtlocation-mapboxgl-6be6263ebf32c45dcbbc2dbe2937422553bc897a.tar.gz
[core] Replace inline SpriteAtlas updates with diffing
Diffstat (limited to 'src/mbgl/renderer/style_diff.cpp')
-rw-r--r--src/mbgl/renderer/style_diff.cpp26
1 files changed, 17 insertions, 9 deletions
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 <class T>
-StyleDifference<T> diff(const std::vector<T>& a, const std::vector<T>& b) {
+template <class T, class Eq>
+StyleDifference<T> diff(const std::vector<T>& a, const std::vector<T>& b, const Eq& eq) {
std::vector<T> 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<T> diff(const std::vector<T>& a, const std::vector<T>& b) {
return result;
}
+ImageDifference diffImages(const std::vector<ImmutableImage>& a,
+ const std::vector<ImmutableImage>& b) {
+ return diff(a, b, [] (const ImmutableImage& lhs, const ImmutableImage& rhs) {
+ return lhs->id == rhs->id;
+ });
+}
+
SourceDifference diffSources(const std::vector<ImmutableSource>& a,
const std::vector<ImmutableSource>& 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<ImmutableLayer>& a,
const std::vector<ImmutableLayer>& 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