@@ -0,0 +1,40 | |||
|
1 | #ifndef SCIQLOP_VARIABLECACHESTRATEGY_H | |
|
2 | #define SCIQLOP_VARIABLECACHESTRATEGY_H | |
|
3 | ||
|
4 | #include "CoreGlobal.h" | |
|
5 | ||
|
6 | #include <QLoggingCategory> | |
|
7 | #include <QObject> | |
|
8 | ||
|
9 | #include <Data/SqpRange.h> | |
|
10 | ||
|
11 | #include <QLoggingCategory> | |
|
12 | ||
|
13 | #include <Common/spimpl.h> | |
|
14 | #include <utility> | |
|
15 | ||
|
16 | ||
|
17 | Q_DECLARE_LOGGING_CATEGORY(LOG_VariableCacheStrategy) | |
|
18 | ||
|
19 | class Variable; | |
|
20 | ||
|
21 | /** | |
|
22 | * Possible types of zoom operation | |
|
23 | */ | |
|
24 | enum class CacheStrategy { FixedTolerance, TwoThreashold }; | |
|
25 | ||
|
26 | /// This class aims to hande the cache strategy. | |
|
27 | class SCIQLOP_CORE_EXPORT VariableCacheStrategy : public QObject { | |
|
28 | Q_OBJECT | |
|
29 | public: | |
|
30 | explicit VariableCacheStrategy(QObject *parent = 0); | |
|
31 | ||
|
32 | std::pair<SqpRange, SqpRange> computeCacheRange(const SqpRange &vRange, | |
|
33 | const SqpRange &rangeRequested); | |
|
34 | ||
|
35 | private: | |
|
36 | class VariableCacheStrategyPrivate; | |
|
37 | spimpl::unique_impl_ptr<VariableCacheStrategyPrivate> impl; | |
|
38 | }; | |
|
39 | ||
|
40 | #endif // SCIQLOP_VARIABLECACHESTRATEGY_H |
@@ -0,0 +1,52 | |||
|
1 | #include "Variable/VariableCacheStrategy.h" | |
|
2 | ||
|
3 | #include "Settings/SqpSettingsDefs.h" | |
|
4 | ||
|
5 | #include "Variable/Variable.h" | |
|
6 | #include "Variable/VariableController.h" | |
|
7 | ||
|
8 | Q_LOGGING_CATEGORY(LOG_VariableCacheStrategy, "VariableCacheStrategy") | |
|
9 | ||
|
10 | struct VariableCacheStrategy::VariableCacheStrategyPrivate { | |
|
11 | VariableCacheStrategyPrivate() : m_CacheStrategy{CacheStrategy::FixedTolerance} {} | |
|
12 | ||
|
13 | CacheStrategy m_CacheStrategy; | |
|
14 | }; | |
|
15 | ||
|
16 | ||
|
17 | VariableCacheStrategy::VariableCacheStrategy(QObject *parent) | |
|
18 | : QObject{parent}, impl{spimpl::make_unique_impl<VariableCacheStrategyPrivate>()} | |
|
19 | { | |
|
20 | } | |
|
21 | ||
|
22 | std::pair<SqpRange, SqpRange> | |
|
23 | VariableCacheStrategy::computeCacheRange(const SqpRange &vRange, const SqpRange &rangeRequested) | |
|
24 | { | |
|
25 | ||
|
26 | auto varRanges = std::pair<SqpRange, SqpRange>{}; | |
|
27 | ||
|
28 | auto toleranceFactor = SqpSettings::toleranceValue(GENERAL_TOLERANCE_AT_UPDATE_KEY, | |
|
29 | GENERAL_TOLERANCE_AT_UPDATE_DEFAULT_VALUE); | |
|
30 | auto tolerance = toleranceFactor * (rangeRequested.m_TEnd - rangeRequested.m_TStart); | |
|
31 | ||
|
32 | switch (impl->m_CacheStrategy) { | |
|
33 | case CacheStrategy::FixedTolerance: { | |
|
34 | varRanges.first = rangeRequested; | |
|
35 | varRanges.second | |
|
36 | = SqpRange{rangeRequested.m_TStart - tolerance, rangeRequested.m_TEnd + tolerance}; | |
|
37 | break; | |
|
38 | } | |
|
39 | ||
|
40 | case CacheStrategy::TwoThreashold: { | |
|
41 | // TODO Implement | |
|
42 | break; | |
|
43 | } | |
|
44 | default: | |
|
45 | qCCritical(LOG_VariableCacheStrategy()) | |
|
46 | << tr("Impossible to use compute the cache range with an unknow cache strategy"); | |
|
47 | // No action | |
|
48 | break; | |
|
49 | } | |
|
50 | ||
|
51 | return varRanges; | |
|
52 | } |
General Comments 0
You need to be logged in to leave comments.
Login now