#include ScalarSeries::ScalarSeries(QVector xAxisData, QVector valuesData, const Unit &xAxisUnit, const Unit &valuesUnit) : DataSeries{std::make_shared >(std::move(xAxisData)), xAxisUnit, std::make_shared >(std::move(valuesData)), valuesUnit} { } std::unique_ptr ScalarSeries::clone() const { return std::make_unique(*this); } std::shared_ptr ScalarSeries::subDataSeries(const SqpRange &range) { auto subXAxisData = QVector(); auto subValuesData = QVector(); this->lockRead(); { const auto ¤tXData = this->xAxisData()->cdata(); const auto ¤tValuesData = this->valuesData()->cdata(); auto xDataBegin = currentXData.cbegin(); auto xDataEnd = currentXData.cend(); auto lowerIt = std::lower_bound(xDataBegin, xDataEnd, range.m_TStart); auto upperIt = std::upper_bound(xDataBegin, xDataEnd, range.m_TEnd); auto distance = std::distance(xDataBegin, lowerIt); auto valuesDataIt = currentValuesData.cbegin() + distance; for (auto xAxisDataIt = lowerIt; xAxisDataIt != upperIt; ++xAxisDataIt, ++valuesDataIt) { subXAxisData.append(*xAxisDataIt); subValuesData.append(*valuesDataIt); } } this->unlock(); return std::make_shared(subXAxisData, subValuesData, this->xAxisUnit(), this->valuesUnit()); }