From 4e36a737f88414a83a0e4fe5cb4848fe9ac63276 2018-08-14 16:44:11 From: Alexis Jeandet Date: 2018-08-14 16:44:11 Subject: [PATCH] Added true single threshold cache strategy and it behaves as expected Signed-off-by: Alexis Jeandet --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 438d26c..f8d099b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,7 @@ FILE (GLOB_RECURSE core_SRCS ./include/Variable/VariableSynchronizationGroup.h ./include/Variable/VariableSynchronizationGroup2.h ./include/Variable/ProportionalCacheStrategy.h + ./include/Variable/SingleThresholdCacheStrategy.h ./include/Variable/VariableCacheStrategyFactory.h ./include/Variable/Variable.h ./include/Variable/VariableCacheController.h diff --git a/include/Data/DateTimeRangeHelper.h b/include/Data/DateTimeRangeHelper.h index 3161ed7..a6420d0 100644 --- a/include/Data/DateTimeRangeHelper.h +++ b/include/Data/DateTimeRangeHelper.h @@ -2,6 +2,7 @@ #define SCIQLOP_DATETIMERANGEHELPER_H #include +#include #include #include diff --git a/include/Variable/ProportionalCacheStrategy.h b/include/Variable/ProportionalCacheStrategy.h index 438ba14..3daee5a 100644 --- a/include/Variable/ProportionalCacheStrategy.h +++ b/include/Variable/ProportionalCacheStrategy.h @@ -1,5 +1,5 @@ -#ifndef SCIQLOP_VARIABLESINGLETHRESHOLDCACHESTRATEGY_H -#define SCIQLOP_VARIABLESINGLETHRESHOLDCACHESTRATEGY_H +#ifndef SCIQLOP_PROPORTIONALCACHESTRATEGY_H +#define SCIQLOP_PROPORTIONALCACHESTRATEGY_H #include "Settings/SqpSettingsDefs.h" #include "VariableCacheStrategy.h" @@ -21,4 +21,4 @@ public: }; -#endif // SCIQLOP_VARIABLESINGLETHRESHOLDCACHESTRATEGY_H +#endif // SCIQLOP_PROPORTIONALCACHESTRATEGY_H diff --git a/include/Variable/SingleThresholdCacheStrategy.h b/include/Variable/SingleThresholdCacheStrategy.h new file mode 100644 index 0000000..9dc7706 --- /dev/null +++ b/include/Variable/SingleThresholdCacheStrategy.h @@ -0,0 +1,22 @@ +#ifndef SCIQLOP_SINGLETHRESHOLDCACHESTRATEGY_H +#define SCIQLOP_SINGLETHRESHOLDCACHESTRATEGY_H + +#include "Settings/SqpSettingsDefs.h" +#include "VariableCacheStrategy.h" + +class SCIQLOP_CORE_EXPORT SingleThresholdCacheStrategy : public VariableCacheStrategy { +public: + SingleThresholdCacheStrategy() = default; + + DateTimeRange computeRange(const DateTimeRange ¤tCacheRange, + const DateTimeRange &rangeRequested) override + { + Q_UNUSED(currentCacheRange); + if(currentCacheRange.contains (rangeRequested*1.1)) + return currentCacheRange; + return rangeRequested*2.; + } +}; + + +#endif // SCIQLOP_SINGLETHRESHOLDCACHESTRATEGY_H diff --git a/include/Variable/VariableCacheStrategyFactory.h b/include/Variable/VariableCacheStrategyFactory.h index 16faf35..519e31f 100644 --- a/include/Variable/VariableCacheStrategyFactory.h +++ b/include/Variable/VariableCacheStrategyFactory.h @@ -7,6 +7,7 @@ #include "VariableCacheStrategy.h" #include "ProportionalCacheStrategy.h" +#include "SingleThresholdCacheStrategy.h" #include #include @@ -27,8 +28,8 @@ public: new ProportionalCacheStrategy{}}; } case CacheStrategy::SingleThreshold: { - SCIQLOP_ERROR(VariableCacheStrategyFactory, "CacheStrategy::SingleThreshold not implemented yet"); - break; + return std::unique_ptr{ + new SingleThresholdCacheStrategy{}}; } case CacheStrategy::TwoThreshold: { SCIQLOP_ERROR(VariableCacheStrategyFactory, "CacheStrategy::TwoThreshold not implemented yet"); diff --git a/include/Variable/VariableSynchronizationGroup2.h b/include/Variable/VariableSynchronizationGroup2.h index 41dcbde..d613f8d 100644 --- a/include/Variable/VariableSynchronizationGroup2.h +++ b/include/Variable/VariableSynchronizationGroup2.h @@ -42,7 +42,7 @@ public: */ void removeVariable(QUuid variable) noexcept { - this->_variables.extract(variable); + this->_variables.erase(variable); } /** diff --git a/src/Variable/VariableController2.cpp b/src/Variable/VariableController2.cpp index 052f958..1aca265 100644 --- a/src/Variable/VariableController2.cpp +++ b/src/Variable/VariableController2.cpp @@ -45,12 +45,12 @@ class VariableController2::VariableController2Private auto data = provider->getData(DataProviderParameters{{range},var->metadata()}); var->mergeDataSeries(data); } - var->setCacheRange(r); + var->setCacheRange(newCacheRange); var->setRange(r); } public: VariableController2Private(QObject* parent=Q_NULLPTR) - :_cacheStrategy(VariableCacheStrategyFactory::createCacheStrategy(CacheStrategy::Proportional)) + :_cacheStrategy(VariableCacheStrategyFactory::createCacheStrategy(CacheStrategy::SingleThreshold)) { Q_UNUSED(parent); }