QContiguousCache Class
template <typename T> class QContiguousCacheLa clase QContiguousCache es una clase de plantilla que proporciona una caché contigua. Más...
| Cabecera: | #include <QContiguousCache> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- Lista de todos los miembros, incluyendo los heredados
- QContiguousCache es parte de Clases Implícitamente Compartidas.
Nota: Todas las funciones de esta clase son reentrantes.
Funciones Públicas
| QContiguousCache(qsizetype capacity = 0) | |
| QContiguousCache(const QContiguousCache<T> &other) | |
| ~QContiguousCache() | |
| void | append(const T &value) |
| bool | areIndexesValid() const |
| const T & | at(qsizetype i) const |
| qsizetype | available() const |
| qsizetype | capacity() const |
| void | clear() |
| bool | containsIndex(qsizetype i) const |
| qsizetype | count() const |
| T & | first() |
| const T & | first() const |
| qsizetype | firstIndex() const |
| void | insert(qsizetype i, const T &value) |
| bool | isEmpty() const |
| bool | isFull() const |
| T & | last() |
| const T & | last() const |
| qsizetype | lastIndex() const |
| void | normalizeIndexes() |
| void | prepend(const T &value) |
| void | removeFirst() |
| void | removeLast() |
| void | setCapacity(qsizetype size) |
| qsizetype | size() const |
| void | swap(QContiguousCache<T> &other) |
| T | takeFirst() |
| T | takeLast() |
| bool | operator!=(const QContiguousCache<T> &other) const |
| QContiguousCache<T> & | operator=(QContiguousCache<T> &&other) |
| QContiguousCache<T> & | operator=(const QContiguousCache<T> &other) |
| bool | operator==(const QContiguousCache<T> &other) const |
| T & | operator[](qsizetype i) |
| const T & | operator[](qsizetype i) const |
Descripción Detallada
La clase QContiguousCache proporciona una forma eficiente de almacenar en caché elementos para su visualización en una vista de interfaz de usuario. A diferencia de QCache, añade la restricción de que los elementos de la caché sean contiguos. Esto tiene la ventaja de coincidir con la forma en que las vistas de interfaz de usuario suelen solicitar los datos, como un conjunto de filas localizadas alrededor de la posición de desplazamiento actual. Esta restricción permite que la caché consuma menos memoria y ciclos de procesador que QCache.
QContiguousCache opera con una capacidad fija, establecida con setCapacity() o pasada como parámetro al constructor. Esta capacidad es el límite superior del uso de memoria por la propia caché, sin incluir la memoria asignada por los propios elementos. Tenga en cuenta que una caché con una capacidad de cero (el valor predeterminado) significa que no se almacenará ningún elemento: las operaciones insert(), append() y prepend() no tendrán efecto. Por lo tanto, es importante ajustar la capacidad a un valor razonable antes de añadir elementos a la caché.
La forma más sencilla de utilizar una caché contigua es utilizar las operaciones append() y prepend().
MyRecord record(int row) { Q_ASSERT(row >= 0 && row < cache.count()); while (row > cache.lastIndex()) cache.append(slowFetchRecord(cache.lastIndex()+1)); while (row < cache.firstIndex()) cache.prepend(slowFetchRecord(cache.firstIndex()-1)); return cache.at(row); }
Si la caché está llena, se eliminará el elemento situado en el extremo opuesto de la caché al que se ha añadido o anexado el nuevo elemento.
Este uso puede optimizarse aún más utilizando la función insert() en el caso de que la fila solicitada esté muy alejada de los elementos actualmente almacenados en caché. Si hay un espacio entre el lugar donde se inserta el nuevo elemento y los elementos actualmente almacenados en caché, los elementos almacenados en caché existentes se eliminan primero para mantener la naturaleza contigua de la caché. Por lo tanto, es importante tener cuidado al utilizar insert() para evitar una limpieza no deseada de la caché.
El rango de índices válidos para la clase QContiguousCache es de 0 a INT_MAX. Llamar a prepend() de forma que el primer índice sea menor que 0 o a append() de forma que el último índice sea mayor que INT_MAX puede provocar que los índices de la caché no sean válidos. Cuando los índices de la caché no son válidos es importante llamar a normalizeIndexes() antes de llamar a cualquiera de las funciones containsIndex(), firstIndex(), lastIndex(), at() o operator[](). Llamar a estas funciones cuando la caché tiene índices inválidos resultará en un comportamiento indefinido. Los índices pueden comprobarse utilizando areIndexesValid()
En la mayoría de los casos los índices no excederán de 0 a INT_MAX, y no será necesario utilizar normalizeIndexes().
Vea el ejemplo de Caché Contigua.
Documentación de las funciones miembro
[explicit] QContiguousCache::QContiguousCache(qsizetype capacity = 0)
Construye una caché con la dirección capacity.
Véase también setCapacity().
QContiguousCache::QContiguousCache(const QContiguousCache<T> &other)
Construye una copia de other.
Esta operación tarda un tiempo constante, porque QContiguousCache se comparte implícitamente. Esto hace que devolver un QContiguousCache desde una función sea muy rápido. Si se modifica una instancia compartida, se copiará (copy-on-write), y eso lleva un tiempo lineal.
Véase también operator=().
QContiguousCache::~QContiguousCache()
Destruye la caché.
void QContiguousCache::append(const T &value)
Inserta value al final de la caché. Si la caché ya está llena, se eliminará el elemento situado al principio de la caché.
Véase también prepend(), insert(), y isFull().
bool QContiguousCache::areIndexesValid() const
Devuelve si los índices de los elementos almacenados en la caché son válidos. Los índices pueden dejar de ser válidos si los elementos se añaden después de la posición de índice INT_MAX o se añaden antes de la posición de índice 0. Esto sólo se espera que ocurra en el uso del estilo de búfer circular de muy larga duración de la caché contigua. Los índices pueden volver a ser válidos llamando a normalizeIndexes().
Véase también normalizeIndexes(), append(), y prepend().
const T &QContiguousCache::at(qsizetype i) const
Devuelve el elemento en la posición de índice i en la caché. i debe ser una posición de índice válida en la caché (es decir, firstIndex() <= i <= lastIndex()).
Los índices de la caché se refieren al número de posiciones en que se encuentra el elemento desde el primer elemento añadido a la caché. Es decir, una caché con una capacidad de 100, a la que se han añadido 150 elementos, tendrá un rango de índices válido de 50 a 149. Esto permite insertar y recuperar elementos en la caché en cualquier momento. Esto permite insertar y recuperar elementos en la caché basándose en una lista teórica infinita.
Véase también firstIndex(), lastIndex(), insert() y operator[]().
qsizetype QContiguousCache::available() const
Devuelve el número de elementos que se pueden añadir a la caché antes de que se llene.
Véase también size(), capacity() y isFull().
qsizetype QContiguousCache::capacity() const
Devuelve el número de elementos que la caché puede almacenar antes de llenarse. Cuando una caché contiene un número de elementos igual a su capacidad, al añadir nuevos elementos se eliminan los más alejados del elemento añadido.
Véase también setCapacity() y size().
void QContiguousCache::clear()
Elimina todos los elementos de la caché. La capacidad no se modifica.
bool QContiguousCache::containsIndex(qsizetype i) const
Devuelve true si el rango de índices de la caché incluye el índice dado i.
Véase también firstIndex() y lastIndex().
qsizetype QContiguousCache::count() const
Igual que size().
T &QContiguousCache::first()
Devuelve una referencia al primer elemento de la caché. Esta función asume que la caché no está vacía.
Véase también last() y isEmpty().
const T &QContiguousCache::first() const
Se trata de una función sobrecargada.
qsizetype QContiguousCache::firstIndex() const
Devuelve el primer índice válido de la caché. El índice no será válido si la caché está vacía.
Véase también capacity(), size() y lastIndex().
void QContiguousCache::insert(qsizetype i, const T &value)
Inserta el value en la posición de índice i. Si la caché ya contiene un elemento en i, se sustituye ese valor. Si i es uno más que lastIndex() o uno menos que firstIndex() equivale a un append() o un prepend().
Si el índice dado i no está dentro del rango actual de la caché ni es adyacente a los límites del rango de índices de la caché, primero se vacía la caché antes de insertar el elemento. En este punto, la caché tendrá un tamaño de 1. Merece la pena esforzarse por insertar elementos en un orden que comience adyacente al rango de índices actual de la caché.
El rango de índices válidos para la clase QContiguousCache va de 0 a INT_MAX. Insertar fuera de este rango tiene un comportamiento indefinido.
Véase también prepend(), append(), isFull(), firstIndex() y lastIndex().
bool QContiguousCache::isEmpty() const
Devuelve true si no hay elementos almacenados en la caché.
Véase también size() y capacity().
bool QContiguousCache::isFull() const
Devuelve true si el número de elementos almacenados en la caché es igual a la capacidad de la caché.
Véase también size() y capacity().
T &QContiguousCache::last()
Devuelve una referencia al último elemento de la caché. Esta función asume que la caché no está vacía.
Véase también first() y isEmpty().
const T &QContiguousCache::last() const
Se trata de una función sobrecargada.
qsizetype QContiguousCache::lastIndex() const
Devuelve el último índice válido de la caché. El índice no será válido si la caché está vacía.
Véase también capacity(), size() y firstIndex().
void QContiguousCache::normalizeIndexes()
Mueve el primer índice y el último índice de la caché de forma que apunten a índices válidos. La función no modifica el contenido de la caché ni el orden de los elementos dentro de la caché.
Se proporciona para poder corregir los desbordamientos de índice cuando se utiliza la caché como un buffer circular.
QContiguousCache<int> cache(10); cache.insert(INT_MAX, 1); // cache contains one value and has valid indexes, INT_MAX to INT_MAX cache.append(2); // cache contains two values but does not have valid indexes. cache.normalizeIndexes(); // cache has two values, 1 and 2. New first index will be in the range of 0 to capacity().
Véase también areIndexesValid(), append() y prepend().
void QContiguousCache::prepend(const T &value)
Inserta value al principio de la caché. Si la caché ya está llena, se eliminará el elemento situado al final de la caché.
Véase también append(), insert(), y isFull().
void QContiguousCache::removeFirst()
Elimina el primer elemento de la caché. Esta función asume que la caché no está vacía.
Véase también removeLast().
void QContiguousCache::removeLast()
Elimina el último elemento de la caché. Esta función asume que la caché no está vacía.
Véase también removeFirst().
void QContiguousCache::setCapacity(qsizetype size)
Establece la capacidad de la caché en el valor size. Una caché puede contener un número de elementos igual a su capacidad. Al insertar, añadir o añadir elementos a la caché, si la caché ya está llena, se eliminará el elemento más alejado del elemento añadido.
Si el size dado es menor que el recuento actual de elementos en la caché, sólo se conservarán los últimos elementos size de la caché.
Véase también capacity() y isFull().
qsizetype QContiguousCache::size() const
Devuelve el número de elementos contenidos en la caché.
Véase también capacity().
[noexcept] void QContiguousCache::swap(QContiguousCache<T> &other)
Intercambia esta caché con other. Esta operación es muy rápida y nunca falla.
T QContiguousCache::takeFirst()
Elimina el primer elemento de la caché y lo devuelve. Esta función asume que la caché no está vacía.
Si no utiliza el valor devuelto, removeFirst() es más eficiente.
Véase también takeLast() y removeFirst().
T QContiguousCache::takeLast()
Elimina el último elemento de la caché y lo devuelve. Esta función asume que la caché no está vacía.
Si no utiliza el valor devuelto, removeLast() es más eficiente.
Véase también takeFirst() y removeLast().
bool QContiguousCache::operator!=(const QContiguousCache<T> &other) const
Devuelve true si other no es igual a esta caché; en caso contrario devuelve false.
Dos cachés se consideran iguales si contienen los mismos valores en los mismos índices. Esta función requiere el tipo de valor para implementar operator==().
Véase también operator==().
[noexcept] QContiguousCache<T> &QContiguousCache::operator=(QContiguousCache<T> &&other)
Mover-asigna other a esta instancia QContiguousCache.
QContiguousCache<T> &QContiguousCache::operator=(const QContiguousCache<T> &other)
Asigna other a esta caché y devuelve una referencia a la misma.
bool QContiguousCache::operator==(const QContiguousCache<T> &other) const
Devuelve true si other es igual a esta caché; en caso contrario devuelve false.
Dos cachés se consideran iguales si contienen los mismos valores en los mismos índices. Esta función requiere el tipo de valor para implementar operator==().
Véase también operator!=().
T &QContiguousCache::operator[](qsizetype i)
Devuelve el elemento en la posición de índice i como una referencia modificable. Si la caché no contiene un elemento en la posición de índice dada i entonces insertará primero un elemento vacío en esa posición.
En la mayoría de los casos es mejor utilizar at() o insert().
Nota: Esta sobrecarga no-const de operator[] requiere QContiguousCache para hacer una copia profunda. Utilice at() para el acceso de sólo lectura a una sobrecarga no-const QContiguousCache.
Véase también insert() y at().
const T &QContiguousCache::operator[](qsizetype i) const
Igual que at(i).
Se trata de una función sobrecargada.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.