##// END OF EJS Templates
Creates constructor for ScalarSeries that directly takes vectors...
Creates constructor for ScalarSeries that directly takes vectors It is used in Amda result parser to avoid an extra loop

File last commit:

r392:cae900f78dff
r392:cae900f78dff
Show More
ArrayData.h
116 lines | 3.2 KiB | text/x-c | CLexer
Alexandre Leroux
Creates ArrayData (struct that holds data as a vector of double)
r124 #ifndef SCIQLOP_ARRAYDATA_H
#define SCIQLOP_ARRAYDATA_H
Add current progression for thread fix
r364 #include <QReadLocker>
#include <QReadWriteLock>
Alexandre Leroux
Creates ArrayData (struct that holds data as a vector of double)
r124 #include <QVector>
/**
* @brief The ArrayData class represents a dataset for a data series.
*
* A dataset can be unidimensional or two-dimensional. This property is determined by the Dim
* template-parameter.
*
* @tparam Dim the dimension of the ArrayData (one or two)
* @sa IDataSeries
*/
template <int Dim>
class ArrayData {
public:
/**
* Ctor for a unidimensional ArrayData
* @param nbColumns the number of values the ArrayData will hold
*/
template <int D = Dim, typename = std::enable_if_t<D == 1> >
explicit ArrayData(int nbColumns) : m_Data{1, QVector<double>{}}
{
Alexandre Leroux
Review fixes
r372 QWriteLocker locker{&m_Lock};
Alexandre Leroux
Creates ArrayData (struct that holds data as a vector of double)
r124 m_Data[0].resize(nbColumns);
}
Alexandre Leroux
Creates constructor for ScalarSeries that directly takes vectors...
r392 /**
* Ctor for a unidimensional ArrayData
* @param data the data the ArrayData will hold
*/
template <int D = Dim, typename = std::enable_if_t<D == 1> >
explicit ArrayData(QVector<double> data) : m_Data{1, QVector<double>{}}
{
QWriteLocker locker{&m_Lock};
m_Data[0] = std::move(data);
}
Alexandre Leroux
Review fixes
r372 /// Copy ctor
Add current progression for thread fix
r364 explicit ArrayData(const ArrayData &other)
{
Alexandre Leroux
Review fixes
r372 QReadLocker otherLocker{&other.m_Lock};
QWriteLocker locker{&m_Lock};
Add current progression for thread fix
r364 m_Data = other.m_Data;
}
Alexandre Leroux
Creates ArrayData (struct that holds data as a vector of double)
r124 /**
* Sets a data at a specified index. The index has to be valid to be effective
* @param index the index to which the data will be set
* @param data the data to set
* @remarks this method is only available for a unidimensional ArrayData
*/
template <int D = Dim, typename = std::enable_if_t<D == 1> >
void setData(int index, double data) noexcept
{
Alexandre Leroux
Review fixes
r372 QWriteLocker locker{&m_Lock};
Alexandre Leroux
Creates ArrayData (struct that holds data as a vector of double)
r124 if (index >= 0 && index < m_Data.at(0).size()) {
m_Data[0].replace(index, data);
}
}
/**
* @return the data as a vector
* @remarks this method is only available for a unidimensional ArrayData
*/
template <int D = Dim, typename = std::enable_if_t<D == 1> >
Add current progression for thread fix
r364 QVector<double> data() const noexcept
Alexandre Leroux
Creates ArrayData (struct that holds data as a vector of double)
r124 {
Alexandre Leroux
Review fixes
r372 QReadLocker locker{&m_Lock};
Update ArrayData to make it better
r294 return m_Data[0];
Alexandre Leroux
Creates ArrayData (struct that holds data as a vector of double)
r124 }
Add merge API and implement it for the DataSeries
r233 /**
* @return the data as a vector
* @remarks this method is only available for a unidimensional ArrayData
*/
template <int D = Dim, typename = std::enable_if_t<D == 1> >
Add current progression for thread fix
r364 QVector<double> data(double tStart, double tEnd) const noexcept
Add merge API and implement it for the DataSeries
r233 {
Alexandre Leroux
Review fixes
r372 QReadLocker locker{&m_Lock};
Add merge API and implement it for the DataSeries
r233 return m_Data.at(tStart);
}
// TODO Comment
template <int D = Dim, typename = std::enable_if_t<D == 1> >
Update ArrayData to make it better
r294 void merge(const ArrayData<1> &arrayData)
Add merge API and implement it for the DataSeries
r233 {
Alexandre Leroux
Review fixes
r372 QWriteLocker locker{&m_Lock};
Add merge API and implement it for the DataSeries
r233 if (!m_Data.empty()) {
Alexandre Leroux
Review fixes
r372 QReadLocker otherLocker{&arrayData.m_Lock};
Update ArrayData to make it better
r294 m_Data[0] += arrayData.data();
Add merge API and implement it for the DataSeries
r233 }
}
template <int D = Dim, typename = std::enable_if_t<D == 1> >
Add current progression for thread fix
r364 int size() const
Add merge API and implement it for the DataSeries
r233 {
Alexandre Leroux
Review fixes
r372 QReadLocker locker{&m_Lock};
Add merge API and implement it for the DataSeries
r233 return m_Data[0].size();
}
Add current progression for thread fix
r364 void clear()
{
Alexandre Leroux
Review fixes
r372 QWriteLocker locker{&m_Lock};
Add current progression for thread fix
r364 m_Data.clear();
}
Add merge API and implement it for the DataSeries
r233
Alexandre Leroux
Creates ArrayData (struct that holds data as a vector of double)
r124 private:
QVector<QVector<double> > m_Data;
Add current progression for thread fix
r364 mutable QReadWriteLock m_Lock;
Alexandre Leroux
Creates ArrayData (struct that holds data as a vector of double)
r124 };
#endif // SCIQLOP_ARRAYDATA_H