DataSeries.h
107 lines
| 3.2 KiB
| text/x-c
|
CLexer
Alexandre Leroux
|
r125 | #ifndef SCIQLOP_DATASERIES_H | ||
#define SCIQLOP_DATASERIES_H | ||||
#include <Data/ArrayData.h> | ||||
#include <Data/IDataSeries.h> | ||||
r243 | #include <QLoggingCategory> | |||
r364 | #include <QReadLocker> | |||
#include <QReadWriteLock> | ||||
Alexandre Leroux
|
r125 | #include <memory> | ||
r243 | Q_DECLARE_LOGGING_CATEGORY(LOG_DataSeries) | |||
Q_LOGGING_CATEGORY(LOG_DataSeries, "DataSeries") | ||||
Alexandre Leroux
|
r125 | /** | ||
* @brief The DataSeries class is the base (abstract) implementation of IDataSeries. | ||||
* | ||||
* It proposes to set a dimension for the values data | ||||
* | ||||
* @tparam Dim The dimension of the values data | ||||
* | ||||
*/ | ||||
template <int Dim> | ||||
class DataSeries : public IDataSeries { | ||||
public: | ||||
/// @sa IDataSeries::xAxisData() | ||||
std::shared_ptr<ArrayData<1> > xAxisData() override { return m_XAxisData; } | ||||
Alexandre Leroux
|
r310 | const std::shared_ptr<ArrayData<1> > xAxisData() const { return m_XAxisData; } | ||
Alexandre Leroux
|
r125 | |||
/// @sa IDataSeries::xAxisUnit() | ||||
Alexandre Leroux
|
r177 | Unit xAxisUnit() const override { return m_XAxisUnit; } | ||
Alexandre Leroux
|
r125 | |||
/// @return the values dataset | ||||
Alexandre Leroux
|
r310 | std::shared_ptr<ArrayData<Dim> > valuesData() { return m_ValuesData; } | ||
const std::shared_ptr<ArrayData<Dim> > valuesData() const { return m_ValuesData; } | ||||
Alexandre Leroux
|
r125 | |||
/// @sa IDataSeries::valuesUnit() | ||||
Alexandre Leroux
|
r177 | Unit valuesUnit() const override { return m_ValuesUnit; } | ||
Alexandre Leroux
|
r125 | |||
r364 | void clear() | |||
{ | ||||
m_XAxisData->clear(); | ||||
m_ValuesData->clear(); | ||||
} | ||||
r233 | /// @sa IDataSeries::merge() | |||
void merge(IDataSeries *dataSeries) override | ||||
{ | ||||
if (auto dimDataSeries = dynamic_cast<DataSeries<Dim> *>(dataSeries)) { | ||||
r295 | m_XAxisData->merge(*dimDataSeries->xAxisData()); | |||
m_ValuesData->merge(*dimDataSeries->valuesData()); | ||||
r364 | dimDataSeries->clear(); | |||
r233 | } | |||
r243 | else { | |||
qCWarning(LOG_DataSeries()) | ||||
<< QObject::tr("Dection of a type of IDataSeries we cannot merge with !"); | ||||
} | ||||
r233 | } | |||
r364 | virtual void lockRead() { m_Lock.lockForRead(); } | |||
virtual void lockWrite() { m_Lock.lockForWrite(); } | ||||
virtual void unlock() { m_Lock.unlock(); } | ||||
Alexandre Leroux
|
r125 | protected: | ||
/// Protected ctor (DataSeries is abstract) | ||||
Alexandre Leroux
|
r188 | explicit DataSeries(std::shared_ptr<ArrayData<1> > xAxisData, const Unit &xAxisUnit, | ||
std::shared_ptr<ArrayData<Dim> > valuesData, const Unit &valuesUnit) | ||||
Alexandre Leroux
|
r125 | : m_XAxisData{xAxisData}, | ||
Alexandre Leroux
|
r188 | m_XAxisUnit{xAxisUnit}, | ||
Alexandre Leroux
|
r125 | m_ValuesData{valuesData}, | ||
Alexandre Leroux
|
r188 | m_ValuesUnit{valuesUnit} | ||
Alexandre Leroux
|
r125 | { | ||
} | ||||
Alexandre Leroux
|
r310 | /// Copy ctor | ||
explicit DataSeries(const DataSeries<Dim> &other) | ||||
: m_XAxisData{std::make_shared<ArrayData<1> >(*other.m_XAxisData)}, | ||||
m_XAxisUnit{other.m_XAxisUnit}, | ||||
m_ValuesData{std::make_shared<ArrayData<Dim> >(*other.m_ValuesData)}, | ||||
m_ValuesUnit{other.m_ValuesUnit} | ||||
{ | ||||
} | ||||
/// Assignment operator | ||||
template <int D> | ||||
DataSeries &operator=(DataSeries<D> other) | ||||
{ | ||||
std::swap(m_XAxisData, other.m_XAxisData); | ||||
std::swap(m_XAxisUnit, other.m_XAxisUnit); | ||||
std::swap(m_ValuesData, other.m_ValuesData); | ||||
std::swap(m_ValuesUnit, other.m_ValuesUnit); | ||||
return *this; | ||||
} | ||||
Alexandre Leroux
|
r125 | private: | ||
std::shared_ptr<ArrayData<1> > m_XAxisData; | ||||
Alexandre Leroux
|
r177 | Unit m_XAxisUnit; | ||
Alexandre Leroux
|
r125 | std::shared_ptr<ArrayData<Dim> > m_ValuesData; | ||
Alexandre Leroux
|
r177 | Unit m_ValuesUnit; | ||
r364 | ||||
QReadWriteLock m_Lock; | ||||
Alexandre Leroux
|
r125 | }; | ||
#endif // SCIQLOP_DATASERIES_H | ||||