#pragma once #include #include namespace mbgl { namespace style { class CalculationParameters; template class PropertyEvaluator { public: using ResultType = T; PropertyEvaluator(const CalculationParameters& parameters_, T defaultValue_) : parameters(parameters_), defaultValue(std::move(defaultValue_)) {} T operator()(const Undefined&) const { return defaultValue; } T operator()(const T& constant) const { return constant; } T operator()(const Function&) const; private: const CalculationParameters& parameters; T defaultValue; }; template struct Faded { T from; T to; float fromScale; float toScale; float t; }; template class CrossFadedPropertyEvaluator { public: using ResultType = Faded; CrossFadedPropertyEvaluator(const CalculationParameters& parameters_, T defaultValue_) : parameters(parameters_), defaultValue(std::move(defaultValue_)) {} Faded operator()(const Undefined&) const; Faded operator()(const T& constant) const; Faded operator()(const Function&) const; private: Faded calculate(const T& min, const T& mid, const T& max) const; const CalculationParameters& parameters; T defaultValue; }; } // namespace style namespace util { template struct Interpolator> : Uninterpolated {}; } // namespace util } // namespace mbgl