From bdff99c853431b89b56ac9a71dc73a65bc5515df Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 19 May 2017 09:39:41 -0700 Subject: [core] Eliminate round-trip through Value in CameraFunction::evaluate --- include/mbgl/style/function/camera_function.hpp | 2 +- include/mbgl/style/function/exponential_stops.hpp | 19 +++++++++++-------- include/mbgl/style/function/interval_stops.hpp | 17 ++++++++++------- 3 files changed, 22 insertions(+), 16 deletions(-) (limited to 'include/mbgl') diff --git a/include/mbgl/style/function/camera_function.hpp b/include/mbgl/style/function/camera_function.hpp index 2e4aac2238..1b03cc8cf6 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 051f5aa9aa..1c57ec6f5d 100644 --- a/include/mbgl/style/function/exponential_stops.hpp +++ b/include/mbgl/style/function/exponential_stops.hpp @@ -22,26 +22,29 @@ 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, diff --git a/include/mbgl/style/function/interval_stops.hpp b/include/mbgl/style/function/interval_stops.hpp index 50f2b48453..a482a6081c 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; -- cgit v1.2.1