1 #pragma once 2 3 #include <mbgl/style/property_value.hpp> 4 #include <mbgl/renderer/property_evaluation_parameters.hpp> 5 #include <mbgl/renderer/possibly_evaluated_property_value.hpp> 6 7 namespace mbgl { 8 9 template <typename T> 10 class DataDrivenPropertyEvaluator { 11 public: 12 using ResultType = PossiblyEvaluatedPropertyValue<T>; 13 DataDrivenPropertyEvaluator(const PropertyEvaluationParameters & parameters_,T defaultValue_)14 DataDrivenPropertyEvaluator(const PropertyEvaluationParameters& parameters_, T defaultValue_) 15 : parameters(parameters_), 16 defaultValue(std::move(defaultValue_)) {} 17 operator ()(const style::Undefined &) const18 ResultType operator()(const style::Undefined&) const { 19 return ResultType(defaultValue); 20 } 21 operator ()(const T & constant) const22 ResultType operator()(const T& constant) const { 23 return ResultType(constant); 24 } 25 operator ()(const style::PropertyExpression<T> & expression) const26 ResultType operator()(const style::PropertyExpression<T>& expression) const { 27 if (!expression.isFeatureConstant()) { 28 auto returnExpression = expression; 29 returnExpression.useIntegerZoom = parameters.useIntegerZoom; 30 return ResultType(returnExpression); 31 } else if (!parameters.useIntegerZoom) { 32 return ResultType(expression.evaluate(parameters.z)); 33 } else { 34 return ResultType(expression.evaluate(floor(parameters.z))); 35 } 36 } 37 38 private: 39 const PropertyEvaluationParameters& parameters; 40 T defaultValue; 41 }; 42 43 } // namespace mbgl 44