summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAnand Thakker <anandthakker@users.noreply.github.com>2018-08-02 13:48:47 -0400
committerGitHub <noreply@github.com>2018-08-02 13:48:47 -0400
commitd25e1a1e7f313efd78aa76c76e4fed5f4d792d8a (patch)
treefb3e191cf79c09e14e3bf41e1d3212a74175f985 /include
parent952c4131e6a46fd0fab2208379dc340fb02924e3 (diff)
downloadqtlocation-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')
-rw-r--r--include/mbgl/style/expression/comparison.hpp68
-rw-r--r--include/mbgl/style/expression/dsl.hpp1
-rw-r--r--include/mbgl/style/expression/equals.hpp35
-rw-r--r--include/mbgl/style/expression/expression.hpp2
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 {