#pragma once #include #include #include namespace mbgl { template class DataDrivenPropertyEvaluator { public: using ResultType = PossiblyEvaluatedPropertyValue; DataDrivenPropertyEvaluator(const PropertyEvaluationParameters& parameters_, T defaultValue_) : parameters(parameters_), defaultValue(std::move(defaultValue_)) {} ResultType operator()(const style::Undefined&) const { return ResultType(defaultValue); } ResultType operator()(const T& constant) const { return ResultType(constant); } ResultType operator()(const style::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 mbgl