Класс 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 — шаблонный класс, обеспечивающий кэширование.
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 начинает удалять объекты из кэша, чтобы поддерживать предел, начиная с объектов, которые были обработаны меньше всего недавно.
По умолчанию, QCache's maxCost() равно 100. Вы можете указать другое значение в конструкторе QCache:
QCache<int, MyDataStructure> cache(5000);
Каждый раз, когда вы вызываете insert(), вы можете указать стоимость в качестве третьего аргумента (после ключа и указателя на объект для вставки). После вызова вставленный объект принадлежит QCache, который может его удалить в любое время, чтобы освободить место для других объектов.
Для поиска объектов в кэше используйте object() или оператор []. Эта функция ищет объект по его ключу и возвращает либо указатель на кэшированный объект (который принадлежит кэшу), либо 0.
Если вы хотите удалить объект из кэша для определенного ключа, вызовите 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, или 0, если ключ не существует в кэше.
Предупреждение: Возвращаемый объект принадлежит 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, или 0, если ключ не существует в кэше.
Это то же самое, что и object().
Предупреждение: Возвращаемый объект принадлежит QCache и может быть удалён в любое время.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qcache.html