diff --git a/core/include/Data/DataSeries.h b/core/include/Data/DataSeries.h index ce63883..1606810 100644 --- a/core/include/Data/DataSeries.h +++ b/core/include/Data/DataSeries.h @@ -65,6 +65,8 @@ public: double x() const override { return m_XIt->at(0); } double value() const override { return m_ValuesIt->at(0); } double value(int componentIndex) const override { return m_ValuesIt->at(componentIndex); } + double minValue() const override { return m_ValuesIt->min(); } + double maxValue() const override { return m_ValuesIt->max(); } private: ArrayData<1>::Iterator m_XIt; @@ -241,8 +243,19 @@ public: return std::make_pair(cend(), cend()); } - /// @todo ALX: complete + // Gets the iterator on the min of all values data + auto minIt = std::min_element( + xAxisRangeIts.first, xAxisRangeIts.second, [](const auto &it1, const auto &it2) { + return SortUtils::minCompareWithNaN(it1.minValue(), it2.minValue()); + }); + // Gets the iterator on the max of all values data + auto maxIt = std::max_element( + xAxisRangeIts.first, xAxisRangeIts.second, [](const auto &it1, const auto &it2) { + return SortUtils::maxCompareWithNaN(it1.maxValue(), it2.maxValue()); + }); + + return std::make_pair(minIt, maxIt); } // /////// // diff --git a/core/include/Data/DataSeriesIterator.h b/core/include/Data/DataSeriesIterator.h index ada5796..78c05af 100644 --- a/core/include/Data/DataSeriesIterator.h +++ b/core/include/Data/DataSeriesIterator.h @@ -24,6 +24,8 @@ public: virtual double x() const = 0; virtual double value() const = 0; virtual double value(int componentIndex) const = 0; + virtual double minValue() const = 0; + virtual double maxValue() const = 0; }; explicit DataSeriesIteratorValue(std::unique_ptr impl); @@ -43,6 +45,10 @@ public: double value() const; /// Gets value data depending on an index double value(int componentIndex) const; + /// Gets min of all values data + double minValue() const; + /// Gets max of all values data + double maxValue() const; private: std::unique_ptr m_Impl; diff --git a/core/src/Data/DataSeriesIterator.cpp b/core/src/Data/DataSeriesIterator.cpp index ce39a3d..87a2222 100644 --- a/core/src/Data/DataSeriesIterator.cpp +++ b/core/src/Data/DataSeriesIterator.cpp @@ -47,6 +47,16 @@ double DataSeriesIteratorValue::value(int componentIndex) const return m_Impl->value(componentIndex); } +double DataSeriesIteratorValue::minValue() const +{ + return m_Impl->minValue(); +} + +double DataSeriesIteratorValue::maxValue() const +{ + return m_Impl->maxValue(); +} + DataSeriesIterator::DataSeriesIterator(DataSeriesIteratorValue value) : m_CurrentValue{std::move(value)} {