diff --git a/core/include/Variable/Variable.h b/core/include/Variable/Variable.h index e67ba68..f1d4928 100644 --- a/core/include/Variable/Variable.h +++ b/core/include/Variable/Variable.h @@ -47,6 +47,7 @@ public: bool cacheIsInside(const SqpRange &range) const noexcept; QVector provideNotInCacheRangeList(const SqpRange &range) const noexcept; + QVector provideInCacheRangeList(const SqpRange &range) const noexcept; void setDataSeries(std::shared_ptr dataSeries) noexcept; void mergeDataSeries(std::shared_ptr dataSeries) noexcept; diff --git a/core/src/Variable/Variable.cpp b/core/src/Variable/Variable.cpp index ace298f..aad63c4 100644 --- a/core/src/Variable/Variable.cpp +++ b/core/src/Variable/Variable.cpp @@ -182,6 +182,8 @@ bool Variable::cacheIsInside(const SqpRange &range) const noexcept QVector Variable::provideNotInCacheRangeList(const SqpRange &range) const noexcept { + // This code assume that cach in contigue. Can return 0, 1 or 2 SqpRange + auto notInCache = QVector{}; if (!this->cacheContains(range)) { @@ -209,3 +211,33 @@ QVector Variable::provideNotInCacheRangeList(const SqpRange &range) co return notInCache; } + +QVector Variable::provideInCacheRangeList(const SqpRange &range) const noexcept +{ + // This code assume that cach in contigue. Can return 0 or 1 SqpRange + + auto inCache = QVector{}; + + + if (this->cacheContains(range)) { + if (range.m_TStart <= impl->m_CacheRange.m_TEnd + && range.m_TEnd >= impl->m_CacheRange.m_TEnd) { + inCache << SqpRange{range.m_TStart, impl->m_CacheRange.m_TEnd}; + } + + else if (range.m_TStart >= impl->m_CacheRange.m_TStart + && range.m_TEnd < impl->m_CacheRange.m_TEnd) { + inCache << range; + } + else if (range.m_TStart < impl->m_CacheRange.m_TStart + && range.m_TEnd >= impl->m_CacheRange.m_TStart) { + inCache << SqpRange{impl->m_CacheRange.m_TStart, range.m_TEnd}; + } + else { + qCCritical(LOG_Variable()) << tr("Detection of unknown case.") + << QThread::currentThread(); + } + } + + return inCache; +}