Класс QCache
шаблон <typename Key, typename T> класс QCacheКласс QCache — шаблонный класс, предоставляющий кэш. Подробнее...
| Заголовок: | #include <QCache> |
| qmake: | QT += core |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| QCache(int maxCost = 100) | |
| ~QCache() | |
| void | clear() |
| bool | contains(const Key &key) const |
| int | count() const |
| bool | insert(const Key &key, T *object, int cost = 1) |
| bool | isEmpty() const |
| QList<Key> | keys() const |
| int | maxCost() const |
| T * | object(const Key &key) const |
| bool | remove(const Key &key) |
| void | setMaxCost(int cost) |
| int | size() const |
| T * | take(const Key &key) |
| int | 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(int maxCost = 100)
Конструирует кэш, содержимое которого никогда не будет иметь суммарных затрат, превышающих maxCost.
QCache::~QCache()
Удаляет кэш. Удаляет все объекты в кэше.
void QCache::clear()
Удаляет все объекты из кэша.
bool QCache::contains(const Key &key) const
Возвращает true если кэш содержит объект, связанный с ключом key; в противном случае возвращает false.
int QCache::count() const
То же самое, что и size().
bool QCache::insert(const Key &key, T *object, int cost = 1)
Вставляет object в кэш с ключом key и сопутствующими затратами cost. Любой объект с тем же ключом, уже находящийся в кэше, будет удален.
После этого вызова object принадлежит QCache и может быть удален в любое время. В частности, если cost больше maxCost(), объект будет немедленно удалён.
Функция возвращает true если объект был вставлен в кэш; в противном случае она возвращает false.
bool QCache::isEmpty() const
Возвращает true если кэш не содержит объектов; в противном случае возвращает false.
См. также size().
QList<Key> QCache::keys() const
Возвращает список ключей в кэше.
int 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(int cost)
Устанавливает максимально разрешённые общие затраты кэша на cost. Если текущие общие затраты превышают cost, некоторые объекты будут немедленно удалены.
См. также maxCost() и totalCost().
int QCache::size() const
Возвращает количество объектов в кэше.
См. также isEmpty().
T *QCache::take(const Key &key)
Извлекает объект, связанный с ключом key, из кэша, не удаляя его. Возвращает указатель на извлеченный объект или 0, если ключ не существует в кэше.
Владение возвращенным объектом передаётся вызывающей стороне.
См. также remove().
int 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-5.15/qcache.html