CosinusProvider.cpp
95 lines
| 3.0 KiB
| text/x-c
|
CppLexer
Alexandre Leroux
|
r128 | #include "CosinusProvider.h" | ||
#include <Data/DataProviderParameters.h> | ||||
#include <Data/ScalarSeries.h> | ||||
r135 | #include <cmath> | |||
r298 | #include <QDateTime> | |||
r428 | #include <QFuture> | |||
r364 | #include <QThread> | |||
r428 | #include <QtConcurrent/QtConcurrent> | |||
r298 | ||||
r231 | Q_LOGGING_CATEGORY(LOG_CosinusProvider, "CosinusProvider") | |||
r428 | std::shared_ptr<IDataSeries> CosinusProvider::retrieveData(QUuid token, const SqpDateTime &dateTime) | |||
Alexandre Leroux
|
r128 | { | ||
r428 | // TODO: Add Mutex | |||
r298 | auto dataIndex = 0; | |||
r231 | ||||
// Gets the timerange from the parameters | ||||
r298 | double freq = 100.0; | |||
double start = dateTime.m_TStart * freq; // 100 htz | ||||
double end = dateTime.m_TEnd * freq; // 100 htz | ||||
r231 | ||||
// We assure that timerange is valid | ||||
if (end < start) { | ||||
std::swap(start, end); | ||||
} | ||||
// Generates scalar series containing cosinus values (one value per second) | ||||
auto scalarSeries | ||||
= std::make_shared<ScalarSeries>(end - start, Unit{QStringLiteral("t"), true}, Unit{}); | ||||
r428 | ||||
int progress = 0; | ||||
auto progressEnd = end - start; | ||||
r231 | for (auto time = start; time < end; ++time, ++dataIndex) { | |||
r428 | auto it = m_VariableToEnableProvider.find(token); | |||
if (it != m_VariableToEnableProvider.end() && it.value()) { | ||||
const auto timeOnFreq = time / freq; | ||||
scalarSeries->setData(dataIndex, timeOnFreq, std::cos(timeOnFreq)); | ||||
// progression | ||||
int currentProgress = (time - start) * 100.0 / progressEnd; | ||||
if (currentProgress != progress) { | ||||
progress = currentProgress; | ||||
emit dataProvidedProgress(token, progress); | ||||
} | ||||
} | ||||
else { | ||||
if (!it.value()) { | ||||
qCDebug(LOG_CosinusProvider()) | ||||
<< "CosinusProvider::retrieveData: ARRET De l'acquisition detecté" | ||||
<< end - time; | ||||
} | ||||
} | ||||
r231 | } | |||
r428 | emit dataProvidedProgress(token, 0.0); | |||
Alexandre Leroux
|
r128 | return scalarSeries; | ||
} | ||||
Alexandre Leroux
|
r310 | |||
Alexandre Leroux
|
r408 | void CosinusProvider::requestDataLoading(QUuid token, const DataProviderParameters ¶meters) | ||
Alexandre Leroux
|
r310 | { | ||
r428 | // TODO: Add Mutex | |||
m_VariableToEnableProvider[token] = true; | ||||
r367 | qCDebug(LOG_CosinusProvider()) << "CosinusProvider::requestDataLoading" | |||
<< QThread::currentThread()->objectName(); | ||||
Alexandre Leroux
|
r310 | // NOTE: Try to use multithread if possible | ||
Alexandre Leroux
|
r408 | const auto times = parameters.m_Times; | ||
r428 | ||||
Alexandre Leroux
|
r408 | for (const auto &dateTime : qAsConst(times)) { | ||
r428 | if (m_VariableToEnableProvider[token]) { | |||
auto scalarSeries = this->retrieveData(token, dateTime); | ||||
emit dataProvided(token, scalarSeries, dateTime); | ||||
} | ||||
Alexandre Leroux
|
r310 | } | ||
} | ||||
r422 | ||||
void CosinusProvider::requestDataAborting(QUuid identifier) | ||||
{ | ||||
r428 | // TODO: Add Mutex | |||
qCDebug(LOG_CosinusProvider()) << "CosinusProvider::requestDataAborting" << identifier | ||||
r432 | << QThread::currentThread()->objectName(); | |||
r428 | auto it = m_VariableToEnableProvider.find(identifier); | |||
if (it != m_VariableToEnableProvider.end()) { | ||||
it.value() = false; | ||||
} | ||||
else { | ||||
qCWarning(LOG_CosinusProvider()) | ||||
<< tr("Aborting progression of inexistant identifier detected !!!"); | ||||
} | ||||
r422 | } | |||