@@ -190,17 +190,28 public: | |||
|
190 | 190 | |
|
191 | 191 | void purge(double min, double max) override |
|
192 | 192 | { |
|
193 | // Nothing to purge if series is empty | |
|
194 | if (isEmpty()) { | |
|
195 | return; | |
|
196 | } | |
|
197 | ||
|
193 | 198 | if (min > max) { |
|
194 | 199 | std::swap(min, max); |
|
195 | 200 | } |
|
196 | 201 | |
|
197 | lockWrite(); | |
|
198 | ||
|
199 | auto it = std::remove_if( | |
|
200 | begin(), end(), [min, max](const auto &it) { return it.x() < min || it.x() > max; }); | |
|
201 | erase(it, end()); | |
|
202 | // Nothing to purge if series min/max are inside purge range | |
|
203 | auto xMin = cbegin()->x(); | |
|
204 | auto xMax = (--cend())->x(); | |
|
205 | if (xMin >= min && xMax <= max) { | |
|
206 | return; | |
|
207 | } | |
|
202 | 208 | |
|
203 | unlock(); | |
|
209 | auto lowerIt = std::lower_bound( | |
|
210 | begin(), end(), min, [](const auto &it, const auto &val) { return it.x() < val; }); | |
|
211 | erase(begin(), lowerIt); | |
|
212 | auto upperIt = std::upper_bound( | |
|
213 | begin(), end(), max, [](const auto &val, const auto &it) { return val < it.x(); }); | |
|
214 | erase(upperIt, end()); | |
|
204 | 215 | } |
|
205 | 216 | |
|
206 | 217 | // ///////// // |
General Comments 0
You need to be logged in to leave comments.
Login now