ArrayDataIterator.h
68 lines
| 2.1 KiB
| text/x-c
|
CLexer
Alexandre Leroux
|
r597 | #ifndef SCIQLOP_ARRAYDATAITERATOR_H | ||
#define SCIQLOP_ARRAYDATAITERATOR_H | ||||
#include "CoreGlobal.h" | ||||
#include "Data/SqpIterator.h" | ||||
Alexandre Leroux
|
r621 | #include <QVector> | ||
Alexandre Leroux
|
r597 | #include <memory> | ||
/** | ||||
* @brief The ArrayDataIteratorValue class represents the current value of an array data iterator. | ||||
* It offers standard access methods for the data in the series (at(), first()), but it is up to | ||||
* each array data to define its own implementation of how to retrieve this data (one-dim or two-dim | ||||
* array), by implementing the ArrayDataIteratorValue::Impl interface | ||||
* @sa ArrayDataIterator | ||||
*/ | ||||
class SCIQLOP_CORE_EXPORT ArrayDataIteratorValue { | ||||
public: | ||||
struct Impl { | ||||
virtual ~Impl() noexcept = default; | ||||
virtual std::unique_ptr<Impl> clone() const = 0; | ||||
virtual bool equals(const Impl &other) const = 0; | ||||
virtual void next() = 0; | ||||
virtual void prev() = 0; | ||||
virtual double at(int componentIndex) const = 0; | ||||
virtual double first() const = 0; | ||||
virtual double min() const = 0; | ||||
virtual double max() const = 0; | ||||
Alexandre Leroux
|
r621 | virtual QVector<double> values() const = 0; | ||
Alexandre Leroux
|
r627 | |||
virtual void swap(Impl &other) = 0; | ||||
Alexandre Leroux
|
r597 | }; | ||
explicit ArrayDataIteratorValue(std::unique_ptr<Impl> impl); | ||||
ArrayDataIteratorValue(const ArrayDataIteratorValue &other); | ||||
ArrayDataIteratorValue &operator=(ArrayDataIteratorValue other); | ||||
bool equals(const ArrayDataIteratorValue &other) const; | ||||
/// Advances to the next value | ||||
void next(); | ||||
/// Moves back to the previous value | ||||
void prev(); | ||||
/// Gets value of a specified component | ||||
double at(int componentIndex) const; | ||||
/// Gets value of first component | ||||
double first() const; | ||||
/// Gets min value among all components | ||||
double min() const; | ||||
/// Gets max value among all components | ||||
double max() const; | ||||
Alexandre Leroux
|
r621 | /// Gets all values | ||
QVector<double> values() const; | ||||
Alexandre Leroux
|
r597 | |||
Alexandre Leroux
|
r627 | Impl *impl(); | ||
friend void swap(ArrayDataIteratorValue &lhs, ArrayDataIteratorValue &rhs) | ||||
{ | ||||
std::swap(lhs.m_Impl, rhs.m_Impl); | ||||
} | ||||
Alexandre Leroux
|
r597 | private: | ||
std::unique_ptr<Impl> m_Impl; | ||||
}; | ||||
using ArrayDataIterator = SqpIterator<ArrayDataIteratorValue>; | ||||
#endif // SCIQLOP_ARRAYDATAITERATOR_H | ||||