diff --git a/core/include/Variable/VariableCacheController.h b/core/include/Variable/VariableCacheController.h index 57ef371..7830d0a 100644 --- a/core/include/Variable/VariableCacheController.h +++ b/core/include/Variable/VariableCacheController.h @@ -1,6 +1,7 @@ #ifndef SCIQLOP_VARIABLECACHECONTROLLER_H #define SCIQLOP_VARIABLECACHECONTROLLER_H +#include #include #include @@ -9,6 +10,8 @@ #include +Q_DECLARE_LOGGING_CATEGORY(LOG_VariableCacheController) + class Variable; Q_DECLARE_LOGGING_CATEGORY(LOG_VariableCacheController) @@ -23,6 +26,9 @@ public: void addDateTime(std::shared_ptr variable, const SqpDateTime &dateTime); + /// Clears cache concerning a variable + void clear(std::shared_ptr variable) noexcept; + /// Return all of the SqpDataTime part of the dateTime whose are not in the cache QVector provideNotInCacheDateTimeList(std::shared_ptr variable, const SqpDateTime &dateTime); diff --git a/core/include/Variable/VariableController.h b/core/include/Variable/VariableController.h index b7458cc..da13ee0 100644 --- a/core/include/Variable/VariableController.h +++ b/core/include/Variable/VariableController.h @@ -35,6 +35,7 @@ public: * * Delete a variable includes: * - the deletion of the provider associated with the variable + * - removing the cache associated with the variable * * @param variable the variable to delete from the controller. */ diff --git a/core/src/Variable/VariableCacheController.cpp b/core/src/Variable/VariableCacheController.cpp index a648b4d..7c42f2d 100644 --- a/core/src/Variable/VariableCacheController.cpp +++ b/core/src/Variable/VariableCacheController.cpp @@ -61,6 +61,22 @@ void VariableCacheController::addDateTime(std::shared_ptr variable, } } +void VariableCacheController::clear(std::shared_ptr variable) noexcept +{ + if (!variable) { + qCCritical(LOG_VariableCacheController()) << "Can't clear variable cache: variable is null"; + return; + } + + auto nbEntries = impl->m_VariableToSqpDateTimeListMap.erase(variable); + + auto clearCacheMessage + = (nbEntries != 0) + ? tr("Variable cache cleared for variable %1").arg(variable->name()) + : tr("No deletion of variable cache: no cache was associated with the variable"); + qCDebug(LOG_VariableCacheController()) << clearCacheMessage; +} + QVector VariableCacheController::provideNotInCacheDateTimeList(std::shared_ptr variable, const SqpDateTime &dateTime) diff --git a/core/src/Variable/VariableController.cpp b/core/src/Variable/VariableController.cpp index 5e0145d..22f98ea 100644 --- a/core/src/Variable/VariableController.cpp +++ b/core/src/Variable/VariableController.cpp @@ -96,6 +96,9 @@ void VariableController::deleteVariable(std::shared_ptr variable) noex << tr("Number of providers deleted for variable %1: %2") .arg(variable->name(), QString::number(nbProvidersDeleted)); + // Clears cache + impl->m_VariableCacheController->clear(variable); + void VariableController::deleteVariables( const QVector > &variables) noexcept