diff options
author | Anand Thakker <anandthakker@users.noreply.github.com> | 2018-08-02 13:48:47 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-02 13:48:47 -0400 |
commit | d25e1a1e7f313efd78aa76c76e4fed5f4d792d8a (patch) | |
tree | fb3e191cf79c09e14e3bf41e1d3212a74175f985 /include/mbgl | |
parent | 952c4131e6a46fd0fab2208379dc340fb02924e3 (diff) | |
download | qtlocation-mapboxgl-d25e1a1e7f313efd78aa76c76e4fed5f4d792d8a.tar.gz |
Relax typing for comparison operators (#12537)
* Relax typing for comparison operators
Ports https://github.com/mapbox/mapbox-gl-js/pull/6961
* Review comments
* Lint fixes
Diffstat (limited to 'include/mbgl')
-rw-r--r-- | include/mbgl/style/expression/comparison.hpp | 68 | ||||
-rw-r--r-- | include/mbgl/style/expression/dsl.hpp | 1 | ||||
-rw-r--r-- | include/mbgl/style/expression/equals.hpp | 35 | ||||
-rw-r--r-- | include/mbgl/style/expression/expression.hpp | 2 |
4 files changed, 70 insertions, 36 deletions
diff --git a/include/mbgl/style/expression/comparison.hpp b/include/mbgl/style/expression/comparison.hpp new file mode 100644 index 0000000000..cf64f5cd34 --- /dev/null +++ b/include/mbgl/style/expression/comparison.hpp @@ -0,0 +1,68 @@ +#pragma once + +#include <mbgl/style/expression/collator_expression.hpp> +#include <mbgl/style/expression/expression.hpp> +#include <mbgl/style/expression/parsing_context.hpp> +#include <mbgl/style/conversion.hpp> + +#include <memory> + +namespace mbgl { +namespace style { +namespace expression { + +ParseResult parseComparison(const mbgl::style::conversion::Convertible&, ParsingContext&); + +class BasicComparison : public Expression { +public: + using CompareFunctionType = bool (*) (Value, Value); + + BasicComparison( + std::string op, + std::unique_ptr<Expression> lhs, + std::unique_ptr<Expression> rhs); + + void eachChild(const std::function<void(const Expression&)>& visit) const override; + bool operator==(const Expression&) const override; + EvaluationResult evaluate(const EvaluationContext&) const override; + std::vector<optional<Value>> possibleOutputs() const override; + std::string getOperator() const override; + +private: + std::string op; + CompareFunctionType compare; + std::unique_ptr<Expression> lhs; + std::unique_ptr<Expression> rhs; + bool needsRuntimeTypeCheck; +}; + +class CollatorComparison : public Expression { +public: + using CompareFunctionType = bool (*) (std::string, std::string, Collator); + + CollatorComparison( + std::string op, + std::unique_ptr<Expression> lhs, + std::unique_ptr<Expression> rhs, + std::unique_ptr<Expression> collator); + + void eachChild(const std::function<void(const Expression&)>& visit) const override; + bool operator==(const Expression&) const override; + EvaluationResult evaluate(const EvaluationContext&) const override; + std::vector<optional<Value>> possibleOutputs() const override; + std::string getOperator() const override; + +private: + std::string op; + CompareFunctionType compare; + std::unique_ptr<Expression> lhs; + std::unique_ptr<Expression> rhs; + std::unique_ptr<Expression> collator; + bool needsRuntimeTypeCheck; +}; + + + +} // namespace expression +} // namespace style +} // namespace mbgl diff --git a/include/mbgl/style/expression/dsl.hpp b/include/mbgl/style/expression/dsl.hpp index e9de20de18..a4483a6fe6 100644 --- a/include/mbgl/style/expression/dsl.hpp +++ b/include/mbgl/style/expression/dsl.hpp @@ -31,6 +31,7 @@ std::unique_ptr<Expression> literal(Value value); std::unique_ptr<Expression> literal(std::initializer_list<double> value); std::unique_ptr<Expression> literal(std::initializer_list<const char *> value); +std::unique_ptr<Expression> assertion(type::Type, std::unique_ptr<Expression>); std::unique_ptr<Expression> number(std::unique_ptr<Expression>); std::unique_ptr<Expression> string(std::unique_ptr<Expression>); std::unique_ptr<Expression> boolean(std::unique_ptr<Expression>); diff --git a/include/mbgl/style/expression/equals.hpp b/include/mbgl/style/expression/equals.hpp deleted file mode 100644 index 1e8bf7acef..0000000000 --- a/include/mbgl/style/expression/equals.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include <mbgl/style/expression/collator_expression.hpp> -#include <mbgl/style/expression/expression.hpp> -#include <mbgl/style/expression/parsing_context.hpp> -#include <mbgl/style/conversion.hpp> - -#include <memory> - -namespace mbgl { -namespace style { -namespace expression { - -class Equals : public Expression { -public: - Equals(std::unique_ptr<Expression> lhs, std::unique_ptr<Expression> rhs, optional<std::unique_ptr<Expression>> collator, bool negate); - - static ParseResult parse(const mbgl::style::conversion::Convertible&, ParsingContext&); - - void eachChild(const std::function<void(const Expression&)>& visit) const override; - bool operator==(const Expression&) const override; - EvaluationResult evaluate(const EvaluationContext&) const override; - std::vector<optional<Value>> possibleOutputs() const override; - - std::string getOperator() const override { return negate ? "!=" : "=="; } -private: - std::unique_ptr<Expression> lhs; - std::unique_ptr<Expression> rhs; - optional<std::unique_ptr<Expression>> collator; - bool negate; -}; - -} // namespace expression -} // namespace style -} // namespace mbgl diff --git a/include/mbgl/style/expression/expression.hpp b/include/mbgl/style/expression/expression.hpp index 8301f1572c..26124f6463 100644 --- a/include/mbgl/style/expression/expression.hpp +++ b/include/mbgl/style/expression/expression.hpp @@ -133,7 +133,7 @@ enum class Kind : int32_t { Case, Any, All, - Equals, + Comparison, }; class Expression { |