diff options
author | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2018-09-07 16:43:47 -0700 |
---|---|---|
committer | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2018-10-09 16:17:03 -0700 |
commit | 9913a1d787da3cea0323a70ef8fbbb604a7840d4 (patch) | |
tree | 3173a169e2e53aa0df8d3ebf23392004bc512110 | |
parent | 0ab4b69b75f602991cd49ebdd1979543523d1021 (diff) |
isFeatureStateDependent
-rw-r--r-- | src/mbgl/renderer/possibly_evaluated_property_value.hpp | 18 | ||||
-rw-r--r-- | src/mbgl/style/properties.hpp | 22 |
2 files changed, 40 insertions, 0 deletions
diff --git a/src/mbgl/renderer/possibly_evaluated_property_value.hpp b/src/mbgl/renderer/possibly_evaluated_property_value.hpp index 539df0933..b1fa0c502 100644 --- a/src/mbgl/renderer/possibly_evaluated_property_value.hpp +++ b/src/mbgl/renderer/possibly_evaluated_property_value.hpp @@ -26,6 +26,15 @@ public: return value.template is<T>(); } + bool isFeatureStateDependent() const { + return this->match( + [&] (const T&) { return false; }, + [&] (const style::PropertyExpression<T>& expression) { + return !expression.isFeatureStateConstant(); + } + ); + } + optional<T> constant() const { return value.match( [&] (const T& t) { return optional<T>(t); }, @@ -83,6 +92,15 @@ public: [&] (const auto&) { return optional<Faded<T>>(); }); } + bool isFeatureStateDependent() const { + return value.match( + [&] (const Faded<T>&) { return false; }, + [&] (const style::PropertyExpression<T>& expression) { + return !expression.isFeatureStateConstant(); + } + ); + } + Faded<T> constantOr(const Faded<T>& t) const { return constant().value_or(t); } diff --git a/src/mbgl/style/properties.hpp b/src/mbgl/style/properties.hpp index 1210ed914..ebc6e2ee3 100644 --- a/src/mbgl/style/properties.hpp +++ b/src/mbgl/style/properties.hpp @@ -169,6 +169,28 @@ public: evaluate<Ps>(z, feature)... }; } + + template <class T> + static bool isFeatureStateDependent(const T&) { + return false; + } + + template <class T> + static bool isFeatureStateDependent(const PossiblyEvaluatedPropertyValue<T>& v) { + return v.isFeatureStateDependent(); + } + + template <class P> + bool isFeatureStateDependent() const { + return isFeatureStateDependent(this->template get<P>()); + } + + bool isFeatureStateDependent() const { + bool result = false; + util::ignore({ result |= isFeatureStateDependent<Ps>()... }); + return result; + } + }; class Unevaluated : public Tuple<UnevaluatedTypes> { |