@@ -68,6 +68,12 public: | |||
|
68 | 68 | QVector<SqpRange> provideInCacheRangeList(const SqpRange &range) const noexcept; |
|
69 | 69 | void mergeDataSeries(std::shared_ptr<IDataSeries> dataSeries) noexcept; |
|
70 | 70 | |
|
71 | static QVector<SqpRange> provideNotInCacheRangeList(const SqpRange &oldRange, | |
|
72 | const SqpRange &nextRange); | |
|
73 | ||
|
74 | static QVector<SqpRange> provideInCacheRangeList(const SqpRange &oldRange, | |
|
75 | const SqpRange &nextRange); | |
|
76 | ||
|
71 | 77 | signals: |
|
72 | 78 | void updated(); |
|
73 | 79 |
@@ -138,7 +138,6 void Variable::setCacheRange(const SqpRange &cacheRange) noexcept | |||
|
138 | 138 | impl->lockWrite(); |
|
139 | 139 | if (cacheRange != impl->m_CacheRange) { |
|
140 | 140 | impl->m_CacheRange = cacheRange; |
|
141 | impl->purgeDataSeries(); | |
|
142 | 141 | } |
|
143 | 142 | impl->unlock(); |
|
144 | 143 | } |
@@ -174,6 +173,7 void Variable::mergeDataSeries(std::shared_ptr<IDataSeries> dataSeries) noexcept | |||
|
174 | 173 | impl->unlock(); |
|
175 | 174 | } |
|
176 | 175 | |
|
176 | ||
|
177 | 177 | std::shared_ptr<IDataSeries> Variable::dataSeries() const noexcept |
|
178 | 178 | { |
|
179 | 179 | impl->lockRead(); |
@@ -285,7 +285,7 QVector<SqpRange> Variable::provideInCacheRangeList(const SqpRange &range) const | |||
|
285 | 285 | |
|
286 | 286 | if (impl->m_CacheRange != INVALID_RANGE) { |
|
287 | 287 | |
|
288 |
if (this-> |
|
|
288 | if (this->cacheIntersect(range)) { | |
|
289 | 289 | if (range.m_TStart <= impl->m_CacheRange.m_TStart |
|
290 | 290 | && range.m_TEnd >= impl->m_CacheRange.m_TStart |
|
291 | 291 | && range.m_TEnd < impl->m_CacheRange.m_TEnd) { |
@@ -313,3 +313,76 QVector<SqpRange> Variable::provideInCacheRangeList(const SqpRange &range) const | |||
|
313 | 313 | |
|
314 | 314 | return inCache; |
|
315 | 315 | } |
|
316 | ||
|
317 | ||
|
318 | QVector<SqpRange> Variable::provideNotInCacheRangeList(const SqpRange &oldRange, | |
|
319 | const SqpRange &nextRange) | |
|
320 | { | |
|
321 | ||
|
322 | // This code assume that cach in contigue. Can return 0, 1 or 2 SqpRange | |
|
323 | auto notInCache = QVector<SqpRange>{}; | |
|
324 | if (oldRange != INVALID_RANGE) { | |
|
325 | ||
|
326 | if (!oldRange.contains(nextRange)) { | |
|
327 | if (nextRange.m_TEnd <= oldRange.m_TStart || nextRange.m_TStart >= oldRange.m_TEnd) { | |
|
328 | notInCache << nextRange; | |
|
329 | } | |
|
330 | else if (nextRange.m_TStart < oldRange.m_TStart | |
|
331 | && nextRange.m_TEnd <= oldRange.m_TEnd) { | |
|
332 | notInCache << SqpRange{nextRange.m_TStart, oldRange.m_TStart}; | |
|
333 | } | |
|
334 | else if (nextRange.m_TStart < oldRange.m_TStart && nextRange.m_TEnd > oldRange.m_TEnd) { | |
|
335 | notInCache << SqpRange{nextRange.m_TStart, oldRange.m_TStart} | |
|
336 | << SqpRange{oldRange.m_TEnd, nextRange.m_TEnd}; | |
|
337 | } | |
|
338 | else if (nextRange.m_TStart < oldRange.m_TEnd) { | |
|
339 | notInCache << SqpRange{oldRange.m_TEnd, nextRange.m_TEnd}; | |
|
340 | } | |
|
341 | else { | |
|
342 | qCCritical(LOG_Variable()) << tr("Detection of unknown case.") | |
|
343 | << QThread::currentThread(); | |
|
344 | } | |
|
345 | } | |
|
346 | } | |
|
347 | else { | |
|
348 | notInCache << nextRange; | |
|
349 | } | |
|
350 | ||
|
351 | return notInCache; | |
|
352 | } | |
|
353 | ||
|
354 | QVector<SqpRange> Variable::provideInCacheRangeList(const SqpRange &oldRange, | |
|
355 | const SqpRange &nextRange) | |
|
356 | { | |
|
357 | // This code assume that cach is contigue. Can return 0 or 1 SqpRange | |
|
358 | ||
|
359 | auto inCache = QVector<SqpRange>{}; | |
|
360 | ||
|
361 | if (oldRange != INVALID_RANGE) { | |
|
362 | ||
|
363 | if (oldRange.intersect(nextRange)) { | |
|
364 | if (nextRange.m_TStart <= oldRange.m_TStart && nextRange.m_TEnd >= oldRange.m_TStart | |
|
365 | && nextRange.m_TEnd < oldRange.m_TEnd) { | |
|
366 | inCache << SqpRange{oldRange.m_TStart, nextRange.m_TEnd}; | |
|
367 | } | |
|
368 | ||
|
369 | else if (nextRange.m_TStart >= oldRange.m_TStart | |
|
370 | && nextRange.m_TEnd <= oldRange.m_TEnd) { | |
|
371 | inCache << nextRange; | |
|
372 | } | |
|
373 | else if (nextRange.m_TStart > oldRange.m_TStart && nextRange.m_TEnd > oldRange.m_TEnd) { | |
|
374 | inCache << SqpRange{nextRange.m_TStart, oldRange.m_TEnd}; | |
|
375 | } | |
|
376 | else if (nextRange.m_TStart <= oldRange.m_TStart | |
|
377 | && nextRange.m_TEnd >= oldRange.m_TEnd) { | |
|
378 | inCache << oldRange; | |
|
379 | } | |
|
380 | else { | |
|
381 | qCCritical(LOG_Variable()) << tr("Detection of unknown case.") | |
|
382 | << QThread::currentThread(); | |
|
383 | } | |
|
384 | } | |
|
385 | } | |
|
386 | ||
|
387 | return inCache; | |
|
388 | } |
General Comments 0
You need to be logged in to leave comments.
Login now