#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 { if (!parameters.useIntegerZoom) { return ResultType(function.evaluate(parameters.z)); } else { return ResultType(function.evaluate(floor(parameters.z))); } } template ResultType operator()(const Function& function) const { auto returnFunction = function; returnFunction.useIntegerZoom = parameters.useIntegerZoom; return ResultType(returnFunction); } private: const PropertyEvaluationParameters& parameters; T defaultValue; }; } // namespace mbgl