diff options
Diffstat (limited to 'src/mbgl/style/expression')
-rw-r--r-- | src/mbgl/style/expression/assertion.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/style/expression/collator.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/style/expression/comparison.cpp | 40 | ||||
-rw-r--r-- | src/mbgl/style/expression/compound_expression.cpp | 141 | ||||
-rw-r--r-- | src/mbgl/style/expression/dsl.cpp | 15 | ||||
-rw-r--r-- | src/mbgl/style/expression/expression.cpp | 12 | ||||
-rw-r--r-- | src/mbgl/style/expression/in.cpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/expression/interpolate.cpp | 12 | ||||
-rw-r--r-- | src/mbgl/style/expression/parsing_context.cpp | 25 |
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); } |