Класс QCache
шаблон <typename Key, typename T> class 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 автоматически принимает во владение объекты, которые вставляются в кэш, и удаляет их, чтобы освободить место для новых объектов, если необходимо. При вставке объекта в кэш можно указать стоимость, которая должна отражать приблизительную величину занимаемой объектом памяти. Когда сумма стоимости всех объектов (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.2/qcache.html