IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Viadeo Twitter Facebook Share on Google+   
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

QCache

La classe QCache est un modèle qui fournit un cache. Plus d'informations...

#include <QCache>

Voir la position dans l'arbre des classes.

Description détaillée

La classe QCache est un modèle qui fournit un cache.

QCache<Cle, T> définit un cache qui stocke des objets de type T, associés à des clés de type Cle. Par exemple, voici la définition d'un cache qui stocke des objets de type Employe, associés à une clé entière.

QCache<int, Employe> cache;

Voici la manière d'insérer un objet dans le cache.

Employe *employe = new Employe;
employe->setId(37);
employe->setName("Richard Schmit");
...
cache.insert(employe->id(), employe);

L'avantage de l'utilisation de cette classe par rapport aux structures basées sur des clés (comme QMap ou QHash) est que QCache prend possession automatiquement des objets qui y sont insérés et les supprime pour faire de la place, si nécessaire. À l'insertion d'un objet dans le cache, vous pouvez spécifier un coût, ce qui devrait avoir un lien avec la quantité de mémoire utilisée par l'objet. Quand la somme des coûts de tous les objets (totalCost()) excède la limite du cache (maxCost()), QCache commence à supprimer des objets dans le cache pour rester en dessous de la limite, en commençant par les objets les moins utilisés.

Par défaut, maxCost() vaut 100. Vous pouvez spécifier une valeur différente dans le constructeur.

QCache<int, MyDataStructure> cache(5000);

À chaque appel de insert(), vous pouvez spécifier un coût en troisième argument (après la clé et un pointeur vers l'objet à insérer). Après l'appel, l'objet inséré appartiendra à QCache, qui pourra le supprimer à tout moment.

Pour regarder les objets dans le cache, utilisez object() ou operator[](). Cette fonction permet de retrouver un objet par sa clé et retourne, soit un pointeur vers l'objet en cache (détenu par lui) soit 0.

Si vous voulez supprimer un objet du cache, appelez remove(). Ceci supprimera aussi l'objet. Si vous voulez supprimer un objet du cache sans qu'il soit supprimé, appelez take().

Voir aussi QPixmapCache, QHash et QMap.

Fonctions membres

QCache::QCache ( int maxCost = 100 )

Construit un cache dont le contenu ne dépassera jamais un coût plus grand que maxCost.

QCache::~QCache ()

Détruit le cache, ainsi que tous les objets du cache.

void QCache::clear ()

Supprime tous les objets dans le cache.

Voir aussi remove() et take().

bool QCache::contains ( const Key & key ) const

Retourne true si le cache contient un objet associé avec la clé key ; sinon, retourne false.

Voir aussi take() et remove().

int QCache::count () const

Comme size().

bool QCache::insert ( const Key & key, T * object, int cost= 1 )

Insère object dans le cache avec la clé key et le coût cost. Tout objet ayant la même clé dans le cache sera supprimé.

Après cet appel, object est propriété de QCache et peut être supprimé à n'importe quel moment. En particulier, si cost est supérieur à maxCost(), l'objet sera supprimé immédiatement.

Cette fonction retourne true si l'objet a été inséré dans le cache, sinon elle retourne false.

Voir aussi take() et remove().

isEmpty

bool QCache::isEmpty () const

Retourne true si le cache ne contient aucun objet, false sinon.

Voir aussi size().

QList<Key> QCache::keys () const

Retourne une liste des clés du cache.

int QCache::maxCost () const

Retourne le coût maximal autorisé dans le cache.

Voir aussi setMaxCost() et totalCost().

T * QCache::object ( const Key & key) const

Retourne l'objet associé à la clé key ou 0 si la clé n'existe pas dans le cache.

Attention : L'objet retourné est possédé par QCache et peut être supprimé à n'importe quel moment.

Voir aussi take() et remove().

bool QCache::remove ( const Key & key)

Supprime l'objet associé à la clé key. Retourne true si l'objet a été trouvé dans le cache ; sinon, false.

Voir aussi take() et clear().

void QCache::setMaxCost ( int cost)

Autorise un coût maximal de cost. Si le coût total actuel est plus grand que cost nouvellement autorisé, des objets seront supprimés automatiquement.

Voir aussi maxCost() et totalCost().

int QCache::size () const

Retourne le nombre d'objets dans le cache.

Voir aussi isEmpty().

T * QCache::take ( const Key & key)

Prend l'objet associé à la clé key hors du cache sans le supprimer. Retourne un pointeur vers cet objet ou 0 si la clé n'existe pas dans le cache.

La propriété de l'objet retourné est passée à l'appelant.

Voir aussi remove().

int QCache::totalCost () const

Retourne le coût total des objets dans le cache.

Cette valeur est normalement inférieure à maxCost(), mais QCache fait une exception pour les classes implicitement partagées de Qt. Si un objet caché partage ses données internes avec une autre instance, QCache peut garder l'objet, en rendant possiblement totalCost() plus grand que maxCost().

Voir aussi setMaxCost().

T * QCache::operator[] ( const Key & key) const

Retourne un objet associé à la clé key ou 0 si la clé n'existe pas dans le cache.

Ceci équivaut à object().

Attention : L'objet retourné est possédé par QCache et peut être supprimé à tout moment.

Remerciements

Merci à Thibaut Cuvelier pour la traduction et à Jacques Thery pour la relecture !

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 4.7
Copyright © 2021 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur, une redirection cassée ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !