Класс QCache
шаблон <typename Key, typename T> класс QCacheКласс QCache — это шаблонный класс, предоставляющий кэш. Подробнее...
| Заголовок: | #include <QCache> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Примечание: Все функции в этом классе являются многопоточными.
Открытые функции
| QCache(qsizetype maxCost = 100) | |
| ~QCache() | |
| void | clear() |
| bool | contains(const Key &key) const |
| qsizetype | count() const |
| bool | insert(const Key &key, T *object, qsizetype cost = 1) |
| bool | isEmpty() const |
| QList<Key> | keys() const |
| qsizetype | maxCost() const |
| T * | object(const Key &key) const |
| bool | remove(const Key &key) |
| void | setMaxCost(qsizetype cost) |
| qsizetype | size() const |
| T * | take(const Key &key) |
| qsizetype | totalCost() const |
| T * | operator[](const Key &key) const |
Подробное описание
QCache<Key, T> определяет кэш, который хранит объекты типа T, связанные с ключами типа Key. Например, вот определение кэша, который хранит объекты типа Employee, связанные с целочисленным ключом:
QCache<int, Employee> cache;
Вот как вставить объект в кэш:
Employee *employee = new Employee;
employee->setId(37);
employee->setName("Richard Schmit");
...
cache.insert(employee->id(), employee); Преимущества использования QCache по сравнению с другими структурами данных на основе ключей (такими как QMap или QHash) заключаются в том, что QCache автоматически принимает во владение объекты, которые вставляются в кэш, и удаляет их, чтобы освободить место для новых объектов, при необходимости. При вставке объекта в кэш вы можете указать cost, который должен иметь некоторое приближенное отношение к количеству памяти, занимаемой объектом. Когда сумма затрат всех объектов (totalCost()) превышает предел кэша (maxCost()), QCache начинает удалять объекты из кэша, чтобы сохранить его в пределах предела, начиная с объектов, которые были обработаны с меньшей частотой.
По умолчанию maxCost() QCache составляет 100. Вы можете указать другое значение в конструкторе QCache:
QCache<int, MyDataStructure> cache(5000);
Каждый раз, когда вы вызываете insert(), вы можете указать стоимость в качестве третьего аргумента (после ключа и указателя на объект для вставки). После вызова вставленный объект принадлежит QCache, который может его удалить в любое время, чтобы освободить место для других объектов.
Чтобы найти объекты в кэше, используйте object() или operator[](). Эта функция ищет объект по его ключу и возвращает либо указатель на кэшированный объект (который принадлежит кэшу), либо nullptr.
Если вы хотите удалить объект из кэша для определенного ключа, вызовите remove(). Это также удалит объект. Если вы хотите удалить объект из кэша без удаления его QCache, используйте take().
См. также QPixmapCache, QHash и QMap.
Документация по функциям-членам
QCache::QCache(qsizetype maxCost = 100)
Создаёт кэш, содержимое которого никогда не будет иметь общую стоимость, превышающую maxCost.
QCache::~QCache()
Удаляет кэш. Удаляет все объекты в кэше.
void QCache::clear()
Удаляет все объекты в кэше.
bool QCache::contains(const Key &key) const
Возвращает true если кэш содержит объект, связанный с ключом key; в противном случае возвращает false.
qsizetype QCache::count() const
То же самое, что и size().
bool QCache::insert(const Key &key, T *object, qsizetype cost = 1)
Вставляет object в кэш с ключом key и связанной стоимостью cost. Любой объект с тем же ключом, уже находящийся в кэше, будет удалён.
После этого вызова object принадлежит QCache и может быть удалён в любое время. В частности, если cost больше, чем maxCost(), объект будет немедленно удалён.
Функция возвращает true если объект был вставлен в кэш; в противном случае возвращает false.
bool QCache::isEmpty() const
Возвращает true если кэш не содержит объектов; в противном случае возвращает false.
См. также size().
QList<Key> QCache::keys() const
Возвращает список ключей в кэше.
qsizetype QCache::maxCost() const
Возвращает максимальную разрешённую общую стоимость кэша.
См. также setMaxCost() и totalCost().
T *QCache::object(const Key &key) const
Возвращает объект, связанный с ключом key, или nullptr если ключ не существует в кэше.
Предупреждение: Возвращаемый объект принадлежит QCache и может быть удалён в любое время.
bool QCache::remove(const Key &key)
Удаляет объект, связанный с ключом key. Возвращает true если объект был найден в кэше; в противном случае возвращает false.
void QCache::setMaxCost(qsizetype cost)
Устанавливает максимальную разрешённую общую стоимость кэша в cost. Если текущая общая стоимость превышает cost, некоторые объекты удаляются немедленно.
См. также maxCost() и totalCost().
qsizetype QCache::size() const
Возвращает количество объектов в кэше.
См. также isEmpty().
T *QCache::take(const Key &key)
Извлекает объект, связанный с ключом key, из кэша, не удаляя его. Возвращает указатель на извлечённый объект или 0, если ключ не существует в кэше.
Владение возвращаемым объектом передаётся вызывающему коду.
См. также remove().
qsizetype QCache::totalCost() const
Возвращает общую стоимость объектов в кэше.
Это значение обычно ниже maxCost(), но QCache делает исключение для неявно разделяемых классов Qt. Если кэшированный объект разделяет свои внутренние данные с другим экземпляром, QCache может сохранить объект, возможно, приведя к тому, что totalCost() будет больше, чем maxCost().
См. также setMaxCost().
T *QCache::operator[](const Key &key) const
Возвращает объект, связанный с ключом key, или nullptr если ключ отсутствует в кэше.
Это то же самое, что и object().
Предупреждение: Возвращаемый объект принадлежит QCache и может быть удалён в любое время.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qcache.html