#pragma once #include #include #include #include namespace mbgl { namespace style { namespace expression { /** * Special form for error-coalescing coercion expressions "to-number", * "to-color". Since these coercions can fail at runtime, they accept multiple * arguments, only evaluating one at a time until one succeeds. */ class Coercion : public Expression { public: Coercion(type::Type type_, std::vector> inputs_); static ParseResult parse(const mbgl::style::conversion::Convertible& value, ParsingContext& ctx); EvaluationResult evaluate(const EvaluationContext& params) const override; void eachChild(const std::function& visit) const override; bool operator==(const Expression& e) const override; std::vector> possibleOutputs() const override; std::string getOperator() const override; private: EvaluationResult (*coerceSingleValue) (const Value& v); std::vector> inputs; }; } // namespace expression } // namespace style } // namespace mbgl