1 #pragma once
2 
3 #include <mbgl/style/property_value.hpp>
4 #include <mbgl/renderer/property_evaluation_parameters.hpp>
5 
6 namespace mbgl {
7 
8 template <typename T>
9 class PropertyEvaluator {
10 public:
11     using ResultType = T;
12 
PropertyEvaluator(const PropertyEvaluationParameters & parameters_,T defaultValue_)13     PropertyEvaluator(const PropertyEvaluationParameters& parameters_, T defaultValue_)
14         : parameters(parameters_),
15           defaultValue(std::move(defaultValue_)) {}
16 
operator ()(const style::Undefined &) const17     T operator()(const style::Undefined&) const { return defaultValue; }
operator ()(const T & constant) const18     T operator()(const T& constant) const { return constant; }
operator ()(const style::PropertyExpression<T> & fn) const19     T operator()(const style::PropertyExpression<T>& fn) const { return fn.evaluate(parameters.z); }
20 
21 private:
22     const PropertyEvaluationParameters& parameters;
23     T defaultValue;
24 };
25 
26 } // namespace mbgl
27