diff options
Diffstat (limited to 'include/mbgl/style/function/source_function.hpp')
-rw-r--r-- | include/mbgl/style/function/source_function.hpp | 43 |
1 files changed, 7 insertions, 36 deletions
diff --git a/include/mbgl/style/function/source_function.hpp b/include/mbgl/style/function/source_function.hpp index bc4e3b9c7d..a83e73a5d0 100644 --- a/include/mbgl/style/function/source_function.hpp +++ b/include/mbgl/style/function/source_function.hpp @@ -1,15 +1,8 @@ #pragma once +#include <mbgl/style/expression/expression.hpp> +#include <mbgl/style/expression/value.hpp> #include <mbgl/style/expression/is_constant.hpp> -#include <mbgl/style/function/convert.hpp> -#include <mbgl/style/function/exponential_stops.hpp> -#include <mbgl/style/function/interval_stops.hpp> -#include <mbgl/style/function/categorical_stops.hpp> -#include <mbgl/style/function/identity_stops.hpp> -#include <mbgl/util/interpolate.hpp> -#include <mbgl/util/variant.hpp> - -#include <string> namespace mbgl { namespace style { @@ -17,37 +10,15 @@ namespace style { template <class T> class SourceFunction { public: - using Stops = std::conditional_t< - util::Interpolatable<T>::value, - variant< - ExponentialStops<T>, - IntervalStops<T>, - CategoricalStops<T>, - IdentityStops<T>>, - variant< - IntervalStops<T>, - CategoricalStops<T>, - IdentityStops<T>>>; - + // The second parameter should be used only for conversions from legacy functions. SourceFunction(std::unique_ptr<expression::Expression> expression_, optional<T> defaultValue_ = {}) - : isExpression(true), - defaultValue(std::move(defaultValue_)), - expression(std::move(expression_)) - { + : isExpression(defaultValue_), + expression(std::move(expression_)), + defaultValue(std::move(defaultValue_)) { assert(expression::isZoomConstant(*expression)); assert(!expression::isFeatureConstant(*expression)); } - SourceFunction(const std::string& property, const Stops& stops, optional<T> defaultValue_ = {}) - : isExpression(false), - defaultValue(std::move(defaultValue_)), - expression(stops.match([&] (const IdentityStops<T>&) { - return expression::Convert::fromIdentityFunction(expression::valueTypeToExpressionType<T>(), property); - }, [&] (const auto& s) { - return expression::Convert::toExpression(property, s); - })) - {} - template <class Feature> T evaluate(const Feature& feature, T finalDefaultValue) const { const expression::EvaluationResult result = expression->evaluate(expression::EvaluationContext(&feature)); @@ -73,8 +44,8 @@ public: const expression::Expression& getExpression() const { return *expression; } private: + std::shared_ptr<const expression::Expression> expression; optional<T> defaultValue; - std::shared_ptr<expression::Expression> expression; }; } // namespace style |