summaryrefslogtreecommitdiff
path: root/src/mbgl/style/expression
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/expression')
-rw-r--r--src/mbgl/style/expression/assertion.cpp9
-rw-r--r--src/mbgl/style/expression/collator.cpp4
-rw-r--r--src/mbgl/style/expression/comparison.cpp40
-rw-r--r--src/mbgl/style/expression/compound_expression.cpp141
-rw-r--r--src/mbgl/style/expression/dsl.cpp15
-rw-r--r--src/mbgl/style/expression/expression.cpp12
-rw-r--r--src/mbgl/style/expression/in.cpp8
-rw-r--r--src/mbgl/style/expression/interpolate.cpp12
-rw-r--r--src/mbgl/style/expression/parsing_context.cpp25
9 files changed, 145 insertions, 121 deletions
diff --git a/src/mbgl/style/expression/assertion.cpp b/src/mbgl/style/expression/assertion.cpp
index 17f8925511..0b69943779 100644
--- a/src/mbgl/style/expression/assertion.cpp
+++ b/src/mbgl/style/expression/assertion.cpp
@@ -1,6 +1,7 @@
+#include <mbgl/style/conversion_impl.hpp>
#include <mbgl/style/expression/assertion.hpp>
#include <mbgl/style/expression/check_subtype.hpp>
-#include <mbgl/style/conversion_impl.hpp>
+#include <utility>
namespace mbgl {
namespace style {
@@ -8,10 +9,8 @@ namespace expression {
using namespace mbgl::style::conversion;
-Assertion::Assertion(type::Type type_, std::vector<std::unique_ptr<Expression>> inputs_) :
- Expression(Kind::Assertion, type_),
- inputs(std::move(inputs_))
-{
+Assertion::Assertion(type::Type type_, std::vector<std::unique_ptr<Expression>> inputs_)
+ : Expression(Kind::Assertion, std::move(type_)), inputs(std::move(inputs_)) {
assert(!inputs.empty());
}
diff --git a/src/mbgl/style/expression/collator.cpp b/src/mbgl/style/expression/collator.cpp
index 185d713150..a5dbc614af 100644
--- a/src/mbgl/style/expression/collator.cpp
+++ b/src/mbgl/style/expression/collator.cpp
@@ -4,8 +4,8 @@ namespace mbgl {
namespace style {
namespace expression {
-Collator::Collator(bool caseSensitive, bool diacriticSensitive, optional<std::string> locale)
- : collator(platform::Collator(caseSensitive, diacriticSensitive, std::move(locale))) {}
+Collator::Collator(bool caseSensitive, bool diacriticSensitive, const optional<std::string>& locale)
+ : collator(platform::Collator(caseSensitive, diacriticSensitive, locale)) {}
bool Collator::operator==(const Collator& other) const {
return collator == other.collator;
diff --git a/src/mbgl/style/expression/comparison.cpp b/src/mbgl/style/expression/comparison.cpp
index aa5808a975..ca29ace0dd 100644
--- a/src/mbgl/style/expression/comparison.cpp
+++ b/src/mbgl/style/expression/comparison.cpp
@@ -22,30 +22,34 @@ static bool isComparableType(const std::string& op, const type::Type& type) {
}
}
-bool eq(Value a, Value b) { return a == b; }
-bool neq(Value a, Value b) { return a != b; }
-bool lt(Value lhs, Value rhs) {
+bool eq(const Value& a, const Value& b) {
+ return a == b;
+}
+bool neq(const Value& a, const Value& b) {
+ return a != b;
+}
+bool lt(const Value& lhs, const Value& rhs) {
return lhs.match(
[&](const std::string& a) { return a < rhs.get<std::string>(); },
[&](double a) { return a < rhs.get<double>(); },
[&](const auto&) { assert(false); return false; }
);
}
-bool gt(Value lhs, Value rhs) {
+bool gt(const Value& lhs, const Value& rhs) {
return lhs.match(
[&](const std::string& a) { return a > rhs.get<std::string>(); },
[&](double a) { return a > rhs.get<double>(); },
[&](const auto&) { assert(false); return false; }
);
}
-bool lteq(Value lhs, Value rhs) {
+bool lteq(const Value& lhs, const Value& rhs) {
return lhs.match(
[&](const std::string& a) { return a <= rhs.get<std::string>(); },
[&](double a) { return a <= rhs.get<double>(); },
[&](const auto&) { assert(false); return false; }
);
}
-bool gteq(Value lhs, Value rhs) {
+bool gteq(const Value& lhs, const Value& rhs) {
return lhs.match(
[&](const std::string& a) { return a >= rhs.get<std::string>(); },
[&](double a) { return a >= rhs.get<double>(); },
@@ -53,12 +57,24 @@ bool gteq(Value lhs, Value rhs) {
);
}
-bool eqCollate(std::string a, std::string b, Collator c) { return c.compare(a, b) == 0; }
-bool neqCollate(std::string a, std::string b, Collator c) { return !eqCollate(a, b, c); }
-bool ltCollate(std::string a, std::string b, Collator c) { return c.compare(a, b) < 0; }
-bool gtCollate(std::string a, std::string b, Collator c) { return c.compare(a, b) > 0; }
-bool lteqCollate(std::string a, std::string b, Collator c) { return c.compare(a, b) <= 0; }
-bool gteqCollate(std::string a, std::string b, Collator c) { return c.compare(a, b) >= 0; }
+bool eqCollate(const std::string& a, const std::string& b, const Collator& c) {
+ return c.compare(a, b) == 0;
+}
+bool neqCollate(const std::string& a, const std::string& b, const Collator& c) {
+ return !eqCollate(a, b, c);
+}
+bool ltCollate(const std::string& a, const std::string& b, const Collator& c) {
+ return c.compare(a, b) < 0;
+}
+bool gtCollate(const std::string& a, const std::string& b, const Collator& c) {
+ return c.compare(a, b) > 0;
+}
+bool lteqCollate(const std::string& a, const std::string& b, const Collator& c) {
+ return c.compare(a, b) <= 0;
+}
+bool gteqCollate(const std::string& a, const std::string& b, const Collator& c) {
+ return c.compare(a, b) >= 0;
+}
static BasicComparison::CompareFunctionType getBasicCompareFunction(const std::string& op) {
if (op == "==") return eq;
diff --git a/src/mbgl/style/expression/compound_expression.cpp b/src/mbgl/style/expression/compound_expression.cpp
index f735f57162..30abe37d2e 100644
--- a/src/mbgl/style/expression/compound_expression.cpp
+++ b/src/mbgl/style/expression/compound_expression.cpp
@@ -84,13 +84,11 @@ struct Signature;
// Simple evaluate function (const T0&, const T1&, ...) -> Result<U>
template <class R, class... Params>
struct Signature<R (Params...)> : SignatureBase {
- Signature(R (*evaluate_)(Params...), std::string name_) :
- SignatureBase(
- valueTypeToExpressionType<std::decay_t<typename R::Value>>(),
- std::vector<type::Type> {valueTypeToExpressionType<std::decay_t<Params>>()...},
- std::move(name_)
- ),
- evaluate(evaluate_) {}
+ Signature(R (*evaluate_)(Params...), const std::string& name_)
+ : SignatureBase(valueTypeToExpressionType<std::decay_t<typename R::Value>>(),
+ std::vector<type::Type>{valueTypeToExpressionType<std::decay_t<Params>>()...},
+ name_),
+ evaluate(evaluate_) {}
EvaluationResult apply(const EvaluationContext& evaluationParameters, const Args& args) const override {
return applyImpl(evaluationParameters, args, std::index_sequence_for<Params...>{});
@@ -116,14 +114,11 @@ private:
// Varargs evaluate function (const Varargs<T>&) -> Result<U>
template <class R, typename T>
struct Signature<R (const Varargs<T>&)> : SignatureBase {
- Signature(R (*evaluate_)(const Varargs<T>&), std::string name_) :
- SignatureBase(
- valueTypeToExpressionType<std::decay_t<typename R::Value>>(),
- VarargsType { valueTypeToExpressionType<T>() },
- std::move(name_)
- ),
- evaluate(evaluate_)
- {}
+ Signature(R (*evaluate_)(const Varargs<T>&), const std::string& name_)
+ : SignatureBase(valueTypeToExpressionType<std::decay_t<typename R::Value>>(),
+ VarargsType{valueTypeToExpressionType<T>()},
+ name_),
+ evaluate(evaluate_) {}
EvaluationResult apply(const EvaluationContext& evaluationParameters, const Args& args) const override {
Varargs<T> evaluated;
@@ -145,14 +140,11 @@ struct Signature<R (const Varargs<T>&)> : SignatureBase {
// (const EvaluationParams&, const T0&, const T1&, ...) -> Result<U>
template <class R, class... Params>
struct Signature<R (const EvaluationContext&, Params...)> : SignatureBase {
- Signature(R (*evaluate_)(const EvaluationContext&, Params...), std::string name_) :
- SignatureBase(
- valueTypeToExpressionType<std::decay_t<typename R::Value>>(),
- std::vector<type::Type> {valueTypeToExpressionType<std::decay_t<Params>>()...},
- std::move(name_)
- ),
- evaluate(evaluate_)
- {}
+ Signature(R (*evaluate_)(const EvaluationContext&, Params...), const std::string& name_)
+ : SignatureBase(valueTypeToExpressionType<std::decay_t<typename R::Value>>(),
+ std::vector<type::Type>{valueTypeToExpressionType<std::decay_t<Params>>()...},
+ name_),
+ evaluate(evaluate_) {}
EvaluationResult apply(const EvaluationContext& evaluationParameters, const Args& args) const override {
return applyImpl(evaluationParameters, args, std::index_sequence_for<Params...>{});
@@ -179,14 +171,11 @@ private:
// (const EvaluationContext&, const Varargs<T>&) -> Result<U>
template <class R, typename T>
struct Signature<R (const EvaluationContext&, const Varargs<T>&)> : SignatureBase {
- Signature(R (*evaluate_)(const EvaluationContext&, const Varargs<T>&), std::string name_) :
- SignatureBase(
- valueTypeToExpressionType<std::decay_t<typename R::Value>>(),
- VarargsType { valueTypeToExpressionType<T>() },
- std::move(name_)
- ),
- evaluate(evaluate_)
- {}
+ Signature(R (*evaluate_)(const EvaluationContext&, const Varargs<T>&), const std::string& name_)
+ : SignatureBase(valueTypeToExpressionType<std::decay_t<typename R::Value>>(),
+ VarargsType{valueTypeToExpressionType<T>()},
+ name_),
+ evaluate(evaluate_) {}
EvaluationResult apply(const EvaluationContext& evaluationParameters, const Args& args) const override {
Varargs<T> evaluated;
@@ -223,7 +212,7 @@ static std::unique_ptr<detail::SignatureBase> makeSignature(std::string name, Fn
} // namespace detail
-Value featureIdAsExpressionValue(EvaluationContext params) {
+Value featureIdAsExpressionValue(const EvaluationContext& params) {
assert(params.feature);
auto id = params.feature->getID();
if (id.is<NullValue>()) return Null;
@@ -232,7 +221,7 @@ Value featureIdAsExpressionValue(EvaluationContext params) {
});
};
-optional<Value> featurePropertyAsExpressionValue(EvaluationContext params, const std::string& key) {
+optional<Value> featurePropertyAsExpressionValue(const EvaluationContext& params, const std::string& key) {
assert(params.feature);
auto property = params.feature->getValue(key);
return property ? toExpressionValue(*property) : optional<Value>();
@@ -253,7 +242,7 @@ optional<std::string> featureTypeAsString(FeatureType type) {
}
};
-optional<double> featurePropertyAsDouble(EvaluationContext params, const std::string& key) {
+optional<double> featurePropertyAsDouble(const EvaluationContext& params, const std::string& key) {
assert(params.feature);
auto property = params.feature->getValue(key);
if (!property) return {};
@@ -265,7 +254,7 @@ optional<double> featurePropertyAsDouble(EvaluationContext params, const std::st
);
};
-optional<std::string> featurePropertyAsString(EvaluationContext params, const std::string& key) {
+optional<std::string> featurePropertyAsString(const EvaluationContext& params, const std::string& key) {
assert(params.feature);
auto property = params.feature->getValue(key);
if (!property) return {};
@@ -275,7 +264,7 @@ optional<std::string> featurePropertyAsString(EvaluationContext params, const st
);
};
-optional<double> featureIdAsDouble(EvaluationContext params) {
+optional<double> featureIdAsDouble(const EvaluationContext& params) {
assert(params.feature);
auto id = params.feature->getID();
return id.match(
@@ -286,7 +275,7 @@ optional<double> featureIdAsDouble(EvaluationContext params) {
);
};
-optional<std::string> featureIdAsString(EvaluationContext params) {
+optional<std::string> featureIdAsString(const EvaluationContext& params) {
assert(params.feature);
auto id = params.feature->getID();
return id.match(
@@ -723,10 +712,12 @@ const auto& filterLessThanNumberCompoundExpression() {
}
const auto& filterLessThanStringCompoundExpression() {
- static auto signature = detail::makeSignature("filter-<", [](const EvaluationContext& params, const std::string& key, std::string lhs) -> Result<bool> {
- auto rhs = featurePropertyAsString(params, key);
- return rhs ? rhs < lhs : false;
- });
+ static auto signature = detail::makeSignature(
+ "filter-<",
+ [](const EvaluationContext& params, const std::string& key, const std::string& lhs) -> Result<bool> {
+ auto rhs = featurePropertyAsString(params, key);
+ return rhs ? rhs < lhs : false;
+ });
return signature;
}
@@ -739,10 +730,11 @@ const auto& filterIdLessThanNumberCompoundExpression() {
}
const auto& filterIdLessThanStringCompoundExpression() {
- static auto signature = detail::makeSignature("filter-id-<", [](const EvaluationContext& params, std::string lhs) -> Result<bool> {
- auto rhs = featureIdAsString(params);
- return rhs ? rhs < lhs : false;
- });
+ static auto signature = detail::makeSignature(
+ "filter-id-<", [](const EvaluationContext& params, const std::string& lhs) -> Result<bool> {
+ auto rhs = featureIdAsString(params);
+ return rhs ? rhs < lhs : false;
+ });
return signature;
}
@@ -755,10 +747,12 @@ const auto& filterMoreThanNumberCompoundExpression() {
}
const auto& filterMoreThanStringCompoundExpression() {
- static auto signature = detail::makeSignature("filter->", [](const EvaluationContext& params, const std::string& key, std::string lhs) -> Result<bool> {
- auto rhs = featurePropertyAsString(params, key);
- return rhs ? rhs > lhs : false;
- });
+ static auto signature = detail::makeSignature(
+ "filter->",
+ [](const EvaluationContext& params, const std::string& key, const std::string& lhs) -> Result<bool> {
+ auto rhs = featurePropertyAsString(params, key);
+ return rhs ? rhs > lhs : false;
+ });
return signature;
}
@@ -771,10 +765,11 @@ const auto& filterIdMoreThanNumberCompoundExpression() {
}
const auto& filterIdMoreThanStringCompoundExpression() {
- static auto signature = detail::makeSignature("filter-id->", [](const EvaluationContext& params, std::string lhs) -> Result<bool> {
- auto rhs = featureIdAsString(params);
- return rhs ? rhs > lhs : false;
- });
+ static auto signature = detail::makeSignature(
+ "filter-id->", [](const EvaluationContext& params, const std::string& lhs) -> Result<bool> {
+ auto rhs = featureIdAsString(params);
+ return rhs ? rhs > lhs : false;
+ });
return signature;
}
@@ -787,10 +782,12 @@ const auto& filterLessOrEqualThanNumberCompoundExpression() {
}
const auto& filterLessOrEqualThanStringCompoundExpression() {
- static auto signature = detail::makeSignature("filter-<=", [](const EvaluationContext& params, const std::string& key, std::string lhs) -> Result<bool> {
- auto rhs = featurePropertyAsString(params, key);
- return rhs ? rhs <= lhs : false;
- });
+ static auto signature = detail::makeSignature(
+ "filter-<=",
+ [](const EvaluationContext& params, const std::string& key, const std::string& lhs) -> Result<bool> {
+ auto rhs = featurePropertyAsString(params, key);
+ return rhs ? rhs <= lhs : false;
+ });
return signature;
}
@@ -803,10 +800,11 @@ const auto& filterIdLessOrEqualThanNumberCompoundExpression() {
}
const auto& filterIdLessOrEqualThanStringCompoundExpression() {
- static auto signature = detail::makeSignature("filter-id-<=", [](const EvaluationContext& params, std::string lhs) -> Result<bool> {
- auto rhs = featureIdAsString(params);
- return rhs ? rhs <= lhs : false;
- });
+ static auto signature = detail::makeSignature(
+ "filter-id-<=", [](const EvaluationContext& params, const std::string& lhs) -> Result<bool> {
+ auto rhs = featureIdAsString(params);
+ return rhs ? rhs <= lhs : false;
+ });
return signature;
}
@@ -819,10 +817,12 @@ const auto& filterGreaterOrEqualThanNumberCompoundExpression() {
}
const auto& filterGreaterOrEqualThanStringCompoundExpression() {
- static auto signature = detail::makeSignature("filter->=", [](const EvaluationContext& params, const std::string& key, std::string lhs) -> Result<bool> {
- auto rhs = featurePropertyAsString(params, key);
- return rhs ? rhs >= lhs : false;
- });
+ static auto signature = detail::makeSignature(
+ "filter->=",
+ [](const EvaluationContext& params, const std::string& key, const std::string& lhs) -> Result<bool> {
+ auto rhs = featurePropertyAsString(params, key);
+ return rhs ? rhs >= lhs : false;
+ });
return signature;
}
@@ -835,10 +835,11 @@ const auto& filterIdGreaterOrEqualThanNumberCompoundExpression() {
}
const auto& filterIdGreaterOrEqualThanStringCompoundExpression() {
- static auto signature = detail::makeSignature("filter-id->=", [](const EvaluationContext& params, std::string lhs) -> Result<bool> {
- auto rhs = featureIdAsString(params);
- return rhs ? rhs >= lhs : false;
- });
+ static auto signature = detail::makeSignature(
+ "filter-id->=", [](const EvaluationContext& params, const std::string& lhs) -> Result<bool> {
+ auto rhs = featureIdAsString(params);
+ return rhs ? rhs >= lhs : false;
+ });
return signature;
}
@@ -1065,7 +1066,7 @@ static ParseResult createCompoundExpression(const Definitions& definitions,
return ParseResult();
}
-ParseResult parseCompoundExpression(const std::string name, const Convertible& value, ParsingContext& ctx) {
+ParseResult parseCompoundExpression(const std::string& name, const Convertible& value, ParsingContext& ctx) {
assert(isArray(value) && arrayLength(value) > 0);
const auto definitions = compoundExpressionRegistry.equal_range(name.c_str());
diff --git a/src/mbgl/style/expression/dsl.cpp b/src/mbgl/style/expression/dsl.cpp
index c8d98e61a4..d8c105633f 100644
--- a/src/mbgl/style/expression/dsl.cpp
+++ b/src/mbgl/style/expression/dsl.cpp
@@ -11,9 +11,10 @@
#include <mbgl/style/expression/literal.hpp>
#include <mbgl/style/expression/step.hpp>
+#include <rapidjson/document.h>
#include <mapbox/geojsonvt.hpp>
#include <mbgl/style/conversion/json.hpp>
-#include <rapidjson/document.h>
+#include <utility>
namespace mbgl {
namespace style {
@@ -54,7 +55,7 @@ std::unique_ptr<Expression> literal(const char* value) {
return literal(std::string(value));
}
-std::unique_ptr<Expression> literal(Value value) {
+std::unique_ptr<Expression> literal(const Value& value) {
return std::make_unique<Literal>(value);
}
@@ -74,7 +75,7 @@ std::unique_ptr<Expression> literal(std::initializer_list<const char *> value) {
return literal(values);
}
-std::unique_ptr<Expression> assertion(type::Type type,
+std::unique_ptr<Expression> assertion(const type::Type& type,
std::unique_ptr<Expression> value,
std::unique_ptr<Expression> def) {
std::vector<std::unique_ptr<Expression>> v = vec(std::move(value));
@@ -99,7 +100,7 @@ std::unique_ptr<Expression> boolean(std::unique_ptr<Expression> value,
return assertion(type::Boolean, std::move(value), std::move(def));
}
-std::unique_ptr<Expression> coercion(type::Type type,
+std::unique_ptr<Expression> coercion(const type::Type& type,
std::unique_ptr<Expression> value,
std::unique_ptr<Expression> def) {
std::vector<std::unique_ptr<Expression>> v = vec(std::move(value));
@@ -193,7 +194,7 @@ std::unique_ptr<Expression> interpolate(Interpolator interpolator,
std::map<double, std::unique_ptr<Expression>> stops;
stops[input1] = std::move(output1);
ParsingContext ctx;
- ParseResult result = createInterpolate(type, interpolator, std::move(input), std::move(stops), ctx);
+ ParseResult result = createInterpolate(type, std::move(interpolator), std::move(input), std::move(stops), ctx);
assert(result);
return std::move(*result);
}
@@ -207,7 +208,7 @@ std::unique_ptr<Expression> interpolate(Interpolator interpolator,
stops[input1] = std::move(output1);
stops[input2] = std::move(output2);
ParsingContext ctx;
- ParseResult result = createInterpolate(type, interpolator, std::move(input), std::move(stops), ctx);
+ ParseResult result = createInterpolate(type, std::move(interpolator), std::move(input), std::move(stops), ctx);
assert(result);
return std::move(*result);
}
@@ -223,7 +224,7 @@ std::unique_ptr<Expression> interpolate(Interpolator interpolator,
stops[input2] = std::move(output2);
stops[input3] = std::move(output3);
ParsingContext ctx;
- ParseResult result = createInterpolate(type, interpolator, std::move(input), std::move(stops), ctx);
+ ParseResult result = createInterpolate(type, std::move(interpolator), std::move(input), std::move(stops), ctx);
assert(result);
return std::move(*result);
}
diff --git a/src/mbgl/style/expression/expression.cpp b/src/mbgl/style/expression/expression.cpp
index 66e2e30b14..4f5e3848d5 100644
--- a/src/mbgl/style/expression/expression.cpp
+++ b/src/mbgl/style/expression/expression.cpp
@@ -1,6 +1,7 @@
-#include <mbgl/style/expression/expression.hpp>
#include <mbgl/style/expression/compound_expression.hpp>
+#include <mbgl/style/expression/expression.hpp>
#include <mbgl/tile/geometry_tile_data.hpp>
+#include <utility>
namespace mbgl {
namespace style {
@@ -43,7 +44,7 @@ EvaluationResult Expression::evaluate(optional<float> zoom,
const Feature& feature,
optional<double> colorRampParameter) const {
GeoJSONFeature f(feature);
- return this->evaluate(EvaluationContext(zoom, &f, colorRampParameter));
+ return this->evaluate(EvaluationContext(std::move(zoom), &f, std::move(colorRampParameter)));
}
EvaluationResult Expression::evaluate(optional<float> zoom,
@@ -51,7 +52,8 @@ EvaluationResult Expression::evaluate(optional<float> zoom,
optional<double> colorRampParameter,
const std::set<std::string>& availableImages) const {
GeoJSONFeature f(feature);
- return this->evaluate(EvaluationContext(zoom, &f, colorRampParameter).withAvailableImages(&availableImages));
+ return this->evaluate(
+ EvaluationContext(std::move(zoom), &f, std::move(colorRampParameter)).withAvailableImages(&availableImages));
}
EvaluationResult Expression::evaluate(optional<float> zoom,
@@ -60,14 +62,14 @@ EvaluationResult Expression::evaluate(optional<float> zoom,
const std::set<std::string>& availableImages,
const CanonicalTileID& canonical) const {
GeoJSONFeature f(feature, canonical);
- return this->evaluate(EvaluationContext(zoom, &f, colorRampParameter)
+ return this->evaluate(EvaluationContext(std::move(zoom), &f, std::move(colorRampParameter))
.withAvailableImages(&availableImages)
.withCanonicalTileID(&canonical));
}
EvaluationResult Expression::evaluate(optional<mbgl::Value> accumulated, const Feature& feature) const {
GeoJSONFeature f(feature);
- return this->evaluate(EvaluationContext(accumulated, &f));
+ return this->evaluate(EvaluationContext(std::move(accumulated), &f));
}
} // namespace expression
diff --git a/src/mbgl/style/expression/in.cpp b/src/mbgl/style/expression/in.cpp
index fa2bd83656..f77a0b7f91 100644
--- a/src/mbgl/style/expression/in.cpp
+++ b/src/mbgl/style/expression/in.cpp
@@ -9,20 +9,20 @@ namespace style {
namespace expression {
namespace {
-bool isComparableType(type::Type type) {
+bool isComparableType(const type::Type& type) {
return type == type::Boolean || type == type::String || type == type::Number || type == type::Null ||
type == type::Value;
}
-bool isComparableRuntimeType(type::Type type) {
+bool isComparableRuntimeType(const type::Type& type) {
return type == type::Boolean || type == type::String || type == type::Number || type == type::Null;
}
-bool isSearchableType(type::Type type) {
+bool isSearchableType(const type::Type& type) {
return type == type::String || type.is<type::Array>() || type == type::Null || type == type::Value;
}
-bool isSearchableRuntimeType(type::Type type) {
+bool isSearchableRuntimeType(const type::Type& type) {
return type == type::String || type.is<type::Array>() || type == type::Null;
}
} // namespace
diff --git a/src/mbgl/style/expression/interpolate.cpp b/src/mbgl/style/expression/interpolate.cpp
index 8725e9e86d..3a7c76819d 100644
--- a/src/mbgl/style/expression/interpolate.cpp
+++ b/src/mbgl/style/expression/interpolate.cpp
@@ -11,12 +11,12 @@ using namespace mbgl::style::conversion;
template <typename T>
class InterpolateImpl : public Interpolate {
public:
- InterpolateImpl(type::Type type_,
- Interpolator interpolator_,
- std::unique_ptr<Expression> input_,
- std::map<double, std::unique_ptr<Expression>> stops_
- ) : Interpolate(std::move(type_), std::move(interpolator_), std::move(input_), std::move(stops_))
- {
+ InterpolateImpl(const type::Type& type_,
+ const Interpolator& interpolator_,
+ std::unique_ptr<Expression> input_,
+ // NOLINTNEXTLINE(performance-unnecessary-value-param)
+ std::map<double, std::unique_ptr<Expression>> stops_)
+ : Interpolate(type_, interpolator_, std::move(input_), std::move(stops_)) {
static_assert(util::Interpolatable<T>::value, "Interpolate expression requires an interpolatable value type.");
}
diff --git a/src/mbgl/style/expression/parsing_context.cpp b/src/mbgl/style/expression/parsing_context.cpp
index 2f1e1c1820..ad1a46b8d6 100644
--- a/src/mbgl/style/expression/parsing_context.cpp
+++ b/src/mbgl/style/expression/parsing_context.cpp
@@ -34,6 +34,7 @@
#include <mbgl/util/string.hpp>
#include <mapbox/eternal.hpp>
+#include <utility>
namespace mbgl {
namespace style {
@@ -85,7 +86,7 @@ using namespace mbgl::style::conversion;
ParseResult ParsingContext::parse(const Convertible& value,
std::size_t index_,
optional<type::Type> expected_,
- optional<TypeAnnotationOption> typeAnnotationOption) {
+ const optional<TypeAnnotationOption>& typeAnnotationOption) {
ParsingContext child(key + "[" + util::toString(index_) + "]",
errors,
std::move(expected_),
@@ -144,7 +145,8 @@ bool isExpression(const std::string& name) {
return expressionRegistry.contains(name.c_str());
}
-ParseResult ParsingContext::parse(const Convertible& value, optional<TypeAnnotationOption> typeAnnotationOption) {
+ParseResult ParsingContext::parse(const Convertible& value,
+ const optional<TypeAnnotationOption>& typeAnnotationOption) {
ParseResult parsed;
if (isArray(value)) {
@@ -179,14 +181,16 @@ ParseResult ParsingContext::parse(const Convertible& value, optional<TypeAnnotat
return parsed;
}
- auto annotate = [] (std::unique_ptr<Expression> expression, type::Type type, TypeAnnotationOption typeAnnotation) -> std::unique_ptr<Expression> {
+ auto annotate = [](std::unique_ptr<Expression> expression,
+ const type::Type& type,
+ TypeAnnotationOption typeAnnotation) -> std::unique_ptr<Expression> {
switch (typeAnnotation) {
- case TypeAnnotationOption::assert:
- return std::make_unique<Assertion>(type, dsl::vec(std::move(expression)));
- case TypeAnnotationOption::coerce:
- return std::make_unique<Coercion>(type, dsl::vec(std::move(expression)));
- case TypeAnnotationOption::omit:
- return expression;
+ case TypeAnnotationOption::assert:
+ return std::make_unique<Assertion>(type, dsl::vec(std::move(expression)));
+ case TypeAnnotationOption::coerce:
+ return std::make_unique<Coercion>(type, dsl::vec(std::move(expression)));
+ case TypeAnnotationOption::omit:
+ return expression;
}
// Not reachable, but placate GCC.
@@ -237,7 +241,8 @@ ParseResult ParsingContext::parse(const Convertible& value, optional<TypeAnnotat
return parsed;
}
-ParseResult ParsingContext::parseExpression(const Convertible& value, optional<TypeAnnotationOption> typeAnnotationOption) {
+ParseResult ParsingContext::parseExpression(const Convertible& value,
+ const optional<TypeAnnotationOption>& typeAnnotationOption) {
return parse(value, typeAnnotationOption);
}