#pragma once #include #include #include namespace mbgl { namespace style { template class DataDrivenPropertyEvaluator { public: using ResultType = PossiblyEvaluatedPropertyValue; DataDrivenPropertyEvaluator(const PropertyEvaluationParameters& parameters_, T defaultValue_) : parameters(parameters_), defaultValue(std::move(defaultValue_)) {} ResultType operator()(const Undefined&) const { return ResultType(defaultValue); } ResultType operator()(const T& constant) const { return ResultType(constant); } ResultType operator()(const CameraFunction& function) const { return ResultType(function.evaluate(parameters.z)); } template ResultType operator()(const Function& function) const { return ResultType(function); } private: const PropertyEvaluationParameters& parameters; T defaultValue; }; } // namespace style } // namespace mbgl