summaryrefslogtreecommitdiff
path: root/src/mbgl/style/properties.hpp
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-06-27 17:06:49 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-07-02 16:05:09 +0300
commitc1445913220023fdaf8ec5960eb6cba27c348864 (patch)
tree4958d023e640e630525760d80431606794c10f78 /src/mbgl/style/properties.hpp
parent21f75229675a07093689d542f116066c7af59ce4 (diff)
downloadqtlocation-mapboxgl-c1445913220023fdaf8ec5960eb6cba27c348864.tar.gz
[core] Introduce LayerProperties::constantsMask()
Constants mask for data-driven paint properties is a reliable criteria of whether the given updated properties can still be used with the existing bucket (and the gl program instance).
Diffstat (limited to 'src/mbgl/style/properties.hpp')
-rw-r--r--src/mbgl/style/properties.hpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/mbgl/style/properties.hpp b/src/mbgl/style/properties.hpp
index 7f58ff223d..9d66f850de 100644
--- a/src/mbgl/style/properties.hpp
+++ b/src/mbgl/style/properties.hpp
@@ -9,6 +9,8 @@
#include <mbgl/util/indexed_tuple.hpp>
#include <mbgl/util/ignore.hpp>
+#include <bitset>
+
namespace mbgl {
class GeometryTileFeature;
@@ -102,6 +104,22 @@ struct IsDataDriven : std::integral_constant<bool, P::IsDataDriven> {};
template <class P>
struct IsOverridable : std::integral_constant<bool, P::IsOverridable> {};
+template <class Ps>
+struct ConstantsMask;
+
+template <class... Ps>
+struct ConstantsMask<TypeList<Ps...>> {
+ template <class Properties>
+ static unsigned long getMask(const Properties& properties) {
+ std::bitset<sizeof... (Ps)> result;
+ util::ignore({
+ result.set(TypeIndex<Ps, Ps...>::value,
+ properties.template get<Ps>().isConstant())...
+ });
+ return result.to_ulong();
+ }
+};
+
template <class... Ps>
class Properties {
public:
@@ -172,6 +190,10 @@ public:
evaluate<Ps>(z, feature)...
};
}
+
+ unsigned long constantsMask() const {
+ return ConstantsMask<DataDrivenProperties>::getMask(*this);
+ }
};
class Unevaluated : public Tuple<UnevaluatedTypes> {