diff --git a/include/mbgl/style/function/camera_function.hpp b/include/mbgl/style/function/camera_function.hpp index 2e4aac223..1b03cc8cf 100644 --- a/include/mbgl/style/function/camera_function.hpp +++ b/include/mbgl/style/function/camera_function.hpp @@ -25,7 +25,7 @@ public: T evaluate(float zoom) const { return stops.match([&] (const auto& s) { - return s.evaluate(Value(double(zoom))).value_or(T()); + return s.evaluate(zoom).value_or(T()); }); } diff --git a/include/mbgl/style/function/exponential_stops.hpp b/include/mbgl/style/function/exponential_stops.hpp index 051f5aa9a..1c57ec6f5 100644 --- a/include/mbgl/style/function/exponential_stops.hpp +++ b/include/mbgl/style/function/exponential_stops.hpp @@ -22,28 +22,31 @@ public: base(base_) { } - optional evaluate(const Value& value) const { + optional evaluate(float z) const { if (stops.empty()) { assert(false); return T(); } - optional z = numericValue(value); - if (!z) { - return T(); - } - - auto it = stops.upper_bound(*z); + auto it = stops.upper_bound(z); if (it == stops.end()) { return stops.rbegin()->second; } else if (it == stops.begin()) { return stops.begin()->second; } else { return util::interpolate(std::prev(it)->second, it->second, - util::interpolationFactor(base, { std::prev(it)->first, it->first }, *z)); + util::interpolationFactor(base, { std::prev(it)->first, it->first }, z)); } } + optional evaluate(const Value& value) const { + optional z = numericValue(value); + if (!z) { + return T(); + } + return evaluate(*z); + } + friend bool operator==(const ExponentialStops& lhs, const ExponentialStops& rhs) { return lhs.stops == rhs.stops && lhs.base == rhs.base; diff --git a/include/mbgl/style/function/interval_stops.hpp b/include/mbgl/style/function/interval_stops.hpp index 50f2b4845..a482a6081 100644 --- a/include/mbgl/style/function/interval_stops.hpp +++ b/include/mbgl/style/function/interval_stops.hpp @@ -18,18 +18,13 @@ public: : stops(std::move(stops_)) { } - optional evaluate(const Value& value) const { + optional evaluate(float z) const { if (stops.empty()) { assert(false); return {}; } - optional z = numericValue(value); - if (!z) { - return {}; - } - - auto it = stops.upper_bound(*z); + auto it = stops.upper_bound(z); if (it == stops.end()) { return stops.rbegin()->second; } else if (it == stops.begin()) { @@ -39,6 +34,14 @@ public: } } + optional evaluate(const Value& value) const { + optional z = numericValue(value); + if (!z) { + return {}; + } + return evaluate(*z); + } + friend bool operator==(const IntervalStops& lhs, const IntervalStops& rhs) { return lhs.stops == rhs.stops;