1 #pragma once
2 
3 #include <mbgl/style/image_impl.hpp>
4 #include <mbgl/style/source_impl.hpp>
5 #include <mbgl/style/layer_impl.hpp>
6 #include <mbgl/util/immutable.hpp>
7 #include <mbgl/util/variant.hpp>
8 
9 #include <unordered_map>
10 
11 namespace mbgl {
12 
13 template <class T>
14 class StyleChange {
15 public:
16     T before;
17     T after;
18 };
19 
20 template <class T>
21 class StyleDifference {
22 public:
23     std::unordered_map<std::string, T> added;
24     std::unordered_map<std::string, T> removed;
25     std::unordered_map<std::string, StyleChange<T>> changed;
26 };
27 
28 using ImmutableImage = Immutable<style::Image::Impl>;
29 using ImageDifference = StyleDifference<ImmutableImage>;
30 
31 ImageDifference diffImages(const Immutable<std::vector<ImmutableImage>>&,
32                            const Immutable<std::vector<ImmutableImage>>&);
33 
34 using ImmutableSource = Immutable<style::Source::Impl>;
35 using SourceDifference = StyleDifference<ImmutableSource>;
36 
37 SourceDifference diffSources(const Immutable<std::vector<ImmutableSource>>&,
38                              const Immutable<std::vector<ImmutableSource>>&);
39 
40 using ImmutableLayer = Immutable<style::Layer::Impl>;
41 using LayerDifference = StyleDifference<ImmutableLayer>;
42 
43 LayerDifference diffLayers(const Immutable<std::vector<ImmutableLayer>>&,
44                            const Immutable<std::vector<ImmutableLayer>>&);
45 
46 bool hasLayoutDifference(const LayerDifference&, const std::string& layerID);
47 
48 } // namespace mbgl
49