1 #pragma once 2 3 #include <mbgl/style/expression/collator_expression.hpp> 4 #include <mbgl/style/expression/expression.hpp> 5 #include <mbgl/style/expression/parsing_context.hpp> 6 #include <mbgl/style/conversion.hpp> 7 8 #include <memory> 9 10 namespace mbgl { 11 namespace style { 12 namespace expression { 13 14 class Equals : public Expression { 15 public: 16 Equals(std::unique_ptr<Expression> lhs, std::unique_ptr<Expression> rhs, optional<std::unique_ptr<Expression>> collator, bool negate); 17 18 static ParseResult parse(const mbgl::style::conversion::Convertible&, ParsingContext&); 19 20 void eachChild(const std::function<void(const Expression&)>& visit) const override; 21 bool operator==(const Expression&) const override; 22 EvaluationResult evaluate(const EvaluationContext&) const override; 23 std::vector<optional<Value>> possibleOutputs() const override; 24 getOperator() const25 std::string getOperator() const override { return negate ? "!=" : "=="; } 26 private: 27 std::unique_ptr<Expression> lhs; 28 std::unique_ptr<Expression> rhs; 29 optional<std::unique_ptr<Expression>> collator; 30 bool negate; 31 }; 32 33 } // namespace expression 34 } // namespace style 35 } // namespace mbgl 36