diff --git a/core/include/Data/DataSeries.h b/core/include/Data/DataSeries.h index e2bea9a..a5a9d68 100644 --- a/core/include/Data/DataSeries.h +++ b/core/include/Data/DataSeries.h @@ -190,17 +190,28 @@ public: void purge(double min, double max) override { + // Nothing to purge if series is empty + if (isEmpty()) { + return; + } + if (min > max) { std::swap(min, max); } - lockWrite(); - - auto it = std::remove_if( - begin(), end(), [min, max](const auto &it) { return it.x() < min || it.x() > max; }); - erase(it, end()); + // Nothing to purge if series min/max are inside purge range + auto xMin = cbegin()->x(); + auto xMax = (--cend())->x(); + if (xMin >= min && xMax <= max) { + return; + } - unlock(); + auto lowerIt = std::lower_bound( + begin(), end(), min, [](const auto &it, const auto &val) { return it.x() < val; }); + erase(begin(), lowerIt); + auto upperIt = std::upper_bound( + begin(), end(), max, [](const auto &val, const auto &it) { return val < it.x(); }); + erase(upperIt, end()); } // ///////// //