|
@@
-115,7
+115,7
struct VariableController::VariableControllerPrivate {
|
|
115
|
QUuid acceptVariableRequest(QUuid varId, std::shared_ptr<IDataSeries> dataSeries);
|
|
115
|
QUuid acceptVariableRequest(QUuid varId, std::shared_ptr<IDataSeries> dataSeries);
|
|
116
|
void updateVariableRequest(QUuid varRequestId);
|
|
116
|
void updateVariableRequest(QUuid varRequestId);
|
|
117
|
void cancelVariableRequest(QUuid varRequestId);
|
|
117
|
void cancelVariableRequest(QUuid varRequestId);
|
|
118
|
|
|
118
|
void abortVariableRequest(QUuid varRequestId);
|
|
119
|
SqpRange getLastRequestedRange(QUuid varId);
|
|
119
|
SqpRange getLastRequestedRange(QUuid varId);
|
|
120
|
|
|
120
|
|
|
121
|
QMutex m_WorkingMutex;
|
|
121
|
QMutex m_WorkingMutex;
|
|
@@
-593,6
+593,9
void VariableController::VariableControllerPrivate::processRequest(std::shared_p
|
|
593
|
auto varStrategyRangesRequested
|
|
593
|
auto varStrategyRangesRequested
|
|
594
|
= m_VariableCacheStrategy->computeRange(oldRange, rangeRequested);
|
|
594
|
= m_VariableCacheStrategy->computeRange(oldRange, rangeRequested);
|
|
595
|
|
|
595
|
|
|
|
|
|
596
|
// Use commented lines to remove the cache (run time)
|
|
|
|
|
597
|
// auto notInCacheRangeList = QVector<SqpRange>{varStrategyRangesRequested.second};
|
|
|
|
|
598
|
// auto inCacheRangeList = QVector<SqpRange>{};
|
|
596
|
auto notInCacheRangeList
|
|
599
|
auto notInCacheRangeList
|
|
597
|
= Variable::provideNotInCacheRangeList(oldRange, varStrategyRangesRequested.second);
|
|
600
|
= Variable::provideNotInCacheRangeList(oldRange, varStrategyRangesRequested.second);
|
|
598
|
auto inCacheRangeList
|
|
601
|
auto inCacheRangeList
|
|
@@
-616,7
+619,8
void VariableController::VariableControllerPrivate::processRequest(std::shared_p
|
|
616
|
if (!varRequestIdCanceled.isNull()) {
|
|
619
|
if (!varRequestIdCanceled.isNull()) {
|
|
617
|
qCInfo(LOG_VariableAcquisitionWorker()) << tr("varRequestIdCanceled: ")
|
|
620
|
qCInfo(LOG_VariableAcquisitionWorker()) << tr("varRequestIdCanceled: ")
|
|
618
|
<< varRequestIdCanceled;
|
|
621
|
<< varRequestIdCanceled;
|
|
619
|
cancelVariableRequest(varRequestIdCanceled);
|
|
622
|
// cancelVariableRequest(varRequestIdCanceled);
|
|
|
|
|
623
|
abortVariableRequest(varRequestIdCanceled);
|
|
620
|
}
|
|
624
|
}
|
|
621
|
}
|
|
625
|
}
|
|
622
|
else {
|
|
626
|
else {
|
|
@@
-851,6
+855,69
void VariableController::VariableControllerPrivate::cancelVariableRequest(QUuid
|
|
851
|
}
|
|
855
|
}
|
|
852
|
}
|
|
856
|
}
|
|
853
|
|
|
857
|
|
|
|
|
|
858
|
void VariableController::VariableControllerPrivate::abortVariableRequest(QUuid varRequestId)
|
|
|
|
|
859
|
{
|
|
|
|
|
860
|
auto varRequestIdsMap = std::map<QUuid, VariableRequest>{};
|
|
|
|
|
861
|
auto varRequestIdToVarIdVarRequestMapIt = m_VarRequestIdToVarIdVarRequestMap.find(varRequestId);
|
|
|
|
|
862
|
if (varRequestIdToVarIdVarRequestMapIt != m_VarRequestIdToVarIdVarRequestMap.cend()) {
|
|
|
|
|
863
|
varRequestIdsMap = varRequestIdToVarIdVarRequestMapIt->second;
|
|
|
|
|
864
|
}
|
|
|
|
|
865
|
|
|
|
|
|
866
|
auto nextUuidToRemove = QSet<QUuid>{};
|
|
|
|
|
867
|
auto varIdEnd = varRequestIdsMap.end();
|
|
|
|
|
868
|
for (auto varIdIt = varRequestIdsMap.begin(); varIdIt != varIdEnd;) {
|
|
|
|
|
869
|
auto currentVarId = varIdIt->first;
|
|
|
|
|
870
|
auto varIdToVarRequestIdQueueMapIt = m_VarIdToVarRequestIdQueueMap.find(currentVarId);
|
|
|
|
|
871
|
if (varIdToVarRequestIdQueueMapIt != m_VarIdToVarRequestIdQueueMap.cend()) {
|
|
|
|
|
872
|
|
|
|
|
|
873
|
auto &varRequestIdQueue = varIdToVarRequestIdQueueMapIt->second;
|
|
|
|
|
874
|
|
|
|
|
|
875
|
auto varReqIdQueueEnd = varRequestIdQueue.end();
|
|
|
|
|
876
|
for (auto varReqIdQueueIt = varRequestIdQueue.begin();
|
|
|
|
|
877
|
varReqIdQueueIt != varRequestIdQueue.end(); ++varReqIdQueueIt) {
|
|
|
|
|
878
|
if (*varReqIdQueueIt == varRequestId) {
|
|
|
|
|
879
|
auto nextVarRequestIdToRm = varReqIdQueueIt;
|
|
|
|
|
880
|
++nextVarRequestIdToRm;
|
|
|
|
|
881
|
|
|
|
|
|
882
|
if (nextVarRequestIdToRm == varReqIdQueueEnd) {
|
|
|
|
|
883
|
// The varRequestId is in progress for the current var, let's aborting it.
|
|
|
|
|
884
|
m_VariableAcquisitionWorker->abortProgressRequested(currentVarId);
|
|
|
|
|
885
|
}
|
|
|
|
|
886
|
else {
|
|
|
|
|
887
|
// There is at least one Request after
|
|
|
|
|
888
|
// let's add only new id to remove
|
|
|
|
|
889
|
if (!nextUuidToRemove.contains(*nextVarRequestIdToRm)) {
|
|
|
|
|
890
|
nextUuidToRemove << *nextVarRequestIdToRm;
|
|
|
|
|
891
|
}
|
|
|
|
|
892
|
}
|
|
|
|
|
893
|
|
|
|
|
|
894
|
varReqIdQueueIt = varRequestIdQueue.erase(varReqIdQueueIt);
|
|
|
|
|
895
|
// break is necessary here, we don"t need to iterate on the dequeue anymore and
|
|
|
|
|
896
|
// the iteration is broken because of the erase
|
|
|
|
|
897
|
break;
|
|
|
|
|
898
|
}
|
|
|
|
|
899
|
}
|
|
|
|
|
900
|
|
|
|
|
|
901
|
// beacause the process can modify the map under the iteration, we need to update the
|
|
|
|
|
902
|
// iterator only if no erase has been done
|
|
|
|
|
903
|
if (varRequestIdQueue.empty()) {
|
|
|
|
|
904
|
varIdIt = varRequestIdsMap.erase(varIdIt);
|
|
|
|
|
905
|
}
|
|
|
|
|
906
|
else {
|
|
|
|
|
907
|
++varIdIt;
|
|
|
|
|
908
|
}
|
|
|
|
|
909
|
}
|
|
|
|
|
910
|
}
|
|
|
|
|
911
|
|
|
|
|
|
912
|
if (varRequestIdToVarIdVarRequestMapIt != m_VarRequestIdToVarIdVarRequestMap.cend()) {
|
|
|
|
|
913
|
m_VarRequestIdToVarIdVarRequestMap.erase(varRequestIdToVarIdVarRequestMapIt);
|
|
|
|
|
914
|
}
|
|
|
|
|
915
|
|
|
|
|
|
916
|
for (auto nextVarRequestIdToRm : nextUuidToRemove) {
|
|
|
|
|
917
|
abortVariableRequest(nextVarRequestIdToRm);
|
|
|
|
|
918
|
}
|
|
|
|
|
919
|
}
|
|
|
|
|
920
|
|
|
854
|
SqpRange VariableController::VariableControllerPrivate::getLastRequestedRange(QUuid varId)
|
|
921
|
SqpRange VariableController::VariableControllerPrivate::getLastRequestedRange(QUuid varId)
|
|
855
|
{
|
|
922
|
{
|
|
856
|
auto lastRangeRequested = SqpRange{INVALID_RANGE};
|
|
923
|
auto lastRangeRequested = SqpRange{INVALID_RANGE};
|