diff options
Diffstat (limited to 'include/mbgl/style/function/convert.hpp')
-rw-r--r-- | include/mbgl/style/function/convert.hpp | 59 |
1 files changed, 25 insertions, 34 deletions
diff --git a/include/mbgl/style/function/convert.hpp b/include/mbgl/style/function/convert.hpp index b34071d219..e5a5808e1d 100644 --- a/include/mbgl/style/function/convert.hpp +++ b/include/mbgl/style/function/convert.hpp @@ -91,22 +91,6 @@ struct Convert { return std::make_unique<detail::ErrorExpression>(message); } - template <typename OutputType> - static ParseResult makeInterpolate(type::Type type, - std::unique_ptr<Expression> input, - std::map<double, std::unique_ptr<Expression>> convertedStops, - Interpolator interpolator) - { - ParseResult curve = ParseResult(std::make_unique<Interpolate<OutputType>>( - std::move(type), - std::move(interpolator), - std::move(input), - std::move(convertedStops) - )); - assert(curve); - return std::move(*curve); - } - template <typename Key> static ParseResult makeMatch(type::Type type, std::unique_ptr<Expression> input, @@ -191,11 +175,12 @@ struct Convert { template <typename T> static std::unique_ptr<Expression> toExpression(const ExponentialStops<T>& stops) { - ParseResult e = makeInterpolate<typename ValueConverter<T>::ExpressionType>( - valueTypeToExpressionType<T>(), - makeZoom(), - convertStops(stops.stops), - ExponentialInterpolator(stops.base)); + ParsingContext ctx; + ParseResult e = createInterpolate(valueTypeToExpressionType<T>(), + ExponentialInterpolator(stops.base), + makeZoom(), + convertStops(stops.stops), + ctx); assert(e); return std::move(*e); } @@ -214,10 +199,12 @@ struct Convert { static std::unique_ptr<Expression> toExpression(const std::string& property, const ExponentialStops<T>& stops) { - ParseResult e = makeInterpolate<typename ValueConverter<T>::ExpressionType>(valueTypeToExpressionType<T>(), - makeGet(type::Number, property), - convertStops(stops.stops), - ExponentialInterpolator(stops.base)); + ParsingContext ctx; + ParseResult e = createInterpolate(valueTypeToExpressionType<T>(), + ExponentialInterpolator(stops.base), + makeGet(type::Number, property), + convertStops(stops.stops), + ctx); assert(e); return std::move(*e); } @@ -247,10 +234,12 @@ struct Convert { template <typename T> static typename std::enable_if_t<util::Interpolatable<T>::value, ParseResult> makeZoomCurve(std::map<double, std::unique_ptr<Expression>> stops) { - return makeInterpolate<typename ValueConverter<T>::ExpressionType>(valueTypeToExpressionType<T>(), - makeZoom(), - std::move(stops), - ExponentialInterpolator(1.0)); + ParsingContext ctx; + return createInterpolate(valueTypeToExpressionType<T>(), + ExponentialInterpolator(1.0), + makeZoom(), + std::move(stops), + ctx); } // non-interpolatable zoom curve @@ -264,13 +253,15 @@ struct Convert { static std::unique_ptr<Expression> toExpression(const std::string& property, const CompositeExponentialStops<T>& stops) { + ParsingContext ctx; + std::map<double, std::unique_ptr<Expression>> outerStops; for (const std::pair<float, std::map<float, T>>& stop : stops.stops) { - std::unique_ptr<Expression> get = makeGet(type::Number, property); - ParseResult innerInterpolate = makeInterpolate<typename ValueConverter<T>::ExpressionType>(valueTypeToExpressionType<T>(), - std::move(get), - convertStops(stop.second), - ExponentialInterpolator(stops.base)); + ParseResult innerInterpolate = createInterpolate(valueTypeToExpressionType<T>(), + ExponentialInterpolator(stops.base), + makeGet(type::Number, property), + convertStops(stop.second), + ctx); assert(innerInterpolate); outerStops.emplace(stop.first, std::move(*innerInterpolate)); } |