##// END OF EJS Templates
Implementation of automatic cancel for request that failed
Implementation of automatic cancel for request that failed

File last commit:

r647:710e631137a0 feature/ImprovePe...
r704:ff170594501a
Show More
DataSeriesIterator.h
78 lines | 2.6 KiB | text/x-c | CLexer
/ core / include / Data / DataSeriesIterator.h
#ifndef SCIQLOP_DATASERIESITERATOR_H
#define SCIQLOP_DATASERIESITERATOR_H
#include "CoreGlobal.h"
#include "Data/SqpIterator.h"
#include <QVector>
#include <memory>
/**
* @brief The DataSeriesIteratorValue class represents the current value of a data series iterator.
* It offers standard access methods for the data in the series (x-axis, values), but it is up to
* each series to define its own implementation of how to retrieve this data, by implementing the
* DataSeriesIteratorValue::Impl interface
*
* @sa DataSeriesIterator
*/
class SCIQLOP_CORE_EXPORT DataSeriesIteratorValue {
public:
struct Impl {
virtual ~Impl() noexcept = default;
virtual std::unique_ptr<Impl> clone() const = 0;
virtual int distance(const Impl &other) const = 0;
virtual bool equals(const Impl &other) const = 0;
virtual bool lowerThan(const Impl &other) const = 0;
virtual std::unique_ptr<Impl> advance(int offset) const = 0;
virtual void next(int offset) = 0;
virtual void prev() = 0;
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;
virtual QVector<double> values() const = 0;
virtual void swap(Impl &other) = 0;
};
explicit DataSeriesIteratorValue(std::unique_ptr<Impl> impl);
DataSeriesIteratorValue(const DataSeriesIteratorValue &other);
DataSeriesIteratorValue &operator=(DataSeriesIteratorValue other);
int distance(const DataSeriesIteratorValue &other) const;
bool equals(const DataSeriesIteratorValue &other) const;
bool lowerThan(const DataSeriesIteratorValue &other) const;
DataSeriesIteratorValue advance(int offset) const;
/// Advances to the next value
void next(int offset = 1);
/// Moves back to the previous value
void prev();
/// Gets x-axis data
double x() const;
/// Gets value data
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;
/// Gets all values data
QVector<double> values() const;
Impl *impl();
friend void swap(DataSeriesIteratorValue &lhs, DataSeriesIteratorValue &rhs)
{
std::swap(lhs.m_Impl, rhs.m_Impl);
}
private:
std::unique_ptr<Impl> m_Impl;
};
using DataSeriesIterator = SqpIterator<DataSeriesIteratorValue>;
#endif // SCIQLOP_DATASERIESITERATOR_H