Classe générique abstraite pour la représentation d'un ensemble. More...
#include "cogitant/set.h"
Public Types | |
typedef SetIterator< SetContent, SetContent & > | iterator |
Itérateur de parcours permettant la modification de l'ensemble. More... | |
typedef SetIterator< SetContent, SetContent const & > | const_iterator |
Itérateur de parcours ne permettant pas la modification de l'ensemble. More... | |
Public Member Functions | |
Constructeurs - destructeur. | |
Set () | |
Constructeur d'un ensemble vide. More... | |
Set (Set< SetContent > const &c) | |
Constructeur par recopie. More... | |
virtual | ~Set () |
Destructeur. More... | |
Modifications. | |
virtual iSet | iAdd (SetContent const &c)=0 |
Ajout d'un élément à l'ensemble. More... | |
virtual void | iDelete (iSet i)=0 |
Suppression d'un élément à l'ensemble. More... | |
virtual void | iReplace (iSet i, SetContent const &v) |
Remplace la valeur d'un élément par une autre valeur. More... | |
virtual void | findAndDelete (SetContent const &c) |
Suppression d'un élément à l'ensemble. More... | |
virtual void | reserve (nSet size)=0 |
Réservation d'espace dans l'ensemble. More... | |
virtual void | clear ()=0 |
Vider. More... | |
Accesseurs. | |
virtual nSet | maxSize () const =0 |
Taille maximale de l'ensemble. More... | |
virtual nSet | size () const =0 |
Taille actuelle de l'ensemble. More... | |
virtual bool | empty () const |
L'ensemble est-il vide ? | |
Parcours par identificateurs. | |
iSet | iBegin () const |
Retourne un identificateur de début pour le parcours de l'ensemble. More... | |
iSet | iEnd () const |
Retourne un identificateur de fin pour le parcours de l'ensemble. More... | |
void | iNext (iSet &i) const |
Incrémente l'identificateur passé pour le parcours de l'ensemble. More... | |
virtual SetContent const & | iGetContent (iSet i) const =0 |
Accès à un élément de l'ensemble. More... | |
virtual SetContent & | iGetContent (iSet i)=0 |
Accès à un élément de l'ensemble. More... | |
virtual iSet | iFind (SetContent const &c) const |
Recherche d'un élément dans l'ensemble. More... | |
Parcours par itérateurs. | |
const_iterator | begin () const |
Retourne un itérateur de début pour le parcours de l'ensemble. More... | |
iterator | begin () |
Retourne un itérateur de début pour le parcours de l'ensemble. More... | |
const_iterator | end () const |
Retourne un itérateur de fin pour le parcours de l'ensemble. More... | |
Opérateurs. | |
SetContent & | operator[] (iSet i) |
Opérateur d'accès. More... | |
SetContent const & | operator[] (iSet i) const |
Opérateur d'accès. More... | |
Protected Member Functions | |
virtual bool | isValidIterator (iSet i1) const |
Vérification de la validité d'un itérateur. More... | |
Classe générique abstraite pour la représentation d'un ensemble.
Cette classe fournit une interface pour l'implantation d'un conteneur de données permettant l'ajout, la suppression, la recherche, le parcours, et l'accès aux éléments contenus par un identificateur. Les éléments d'un ensemble sont identifiés de façon unique par un identificateur de type iSet, ce type étant un type entier. L'accès à l'élément repéré par un iSet se fait en O(1).
Il est possible d'accéder aux éléments d'un ensemble de plusieurs façons:
en utilisant un iSet (identificateur d'ensemble) et les méthodes iBegin(), iEnd(), iGetContent() et operator[](). Il est ainsi possible de modifier les éléments de l'ensemble car la méthode iGetContent() retourne une référence sur l'élément si l'ensemble n'est pas constant. Cette méthode est la plus rapide.
Exemple : Affichage des types de concept du support d'un environnement e.
Quand un ensemble ou une référence sur un ensemble est directement manipulé (plutôt qu'un pointeur sur un ensemble) l'utilisation de l'operator[]() peut conduire à une écriture plus simple :
en utilisant un Set::iterator (équivalent à SetIterator) et les méthodes begin(), end(), SetIterator::operator*(), SetIterator::operator++(). Il est ainsi possible de modifier les éléments de l'ensemble.
Exemple : Affichage des types de relation du support d'un environnement e. Il est à noter que *i
représente l'élément repéré par l'itérateur. S'agissant de pointeurs sur des RelationType, l'appel à l'opérateur de sortie << demande de déréférencer la valeur contenue dans l'ensemble car le but recherché est non pas d'afficher les pointeurs mais bien les objets pointés (les RelationType et non les RelationType*). Ceci explique l'écriture *(*i)
.
en utilisant const_iterator et les méthodes begin(), end(), SetIterator::operator*(), SetIterator::operator++(). Il est impossible de modifier les éléments de l'ensemble.
Exemple : Affichage des types de relation du support d'un environnement e. Les Set::const_iterator s'utilisent de la même façon que les Set::iterator. La seule différence est qu'il est impossible de modifier l'objet repéré par l'itérateur. Dans l'exemple suivant, un appel du type (*i) = NULL
provoquerait une erreur de compilation (ce qui ne serait pas le cas si des Set::iterator étaient utilisés). Il est cependant possible d'appeler dans ce cas une méthode sur le RelationType qui modifie l'objet sans modifier le pointeur sur l'objet.
typedef SetIterator<SetContent, SetContent const &> cogitant::Set< SetContent >::const_iterator |
Itérateur de parcours ne permettant pas la modification de l'ensemble.
typedef SetIterator<SetContent, SetContent&> cogitant::Set< SetContent >::iterator |
Itérateur de parcours permettant la modification de l'ensemble.
cogitant::Set< SetContent >::Set | ( | ) |
Constructeur d'un ensemble vide.
cogitant::Set< SetContent >::Set | ( | Set< SetContent > const & | c | ) |
Constructeur par recopie.
|
virtual |
Destructeur.
const_iterator cogitant::Set< SetContent >::begin | ( | ) | const |
Retourne un itérateur de début pour le parcours de l'ensemble.
Referenced by cogitant::Graph::begin().
iterator cogitant::Set< SetContent >::begin | ( | ) |
Retourne un itérateur de début pour le parcours de l'ensemble.
|
pure virtual |
Vider.
Implemented in cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.
const_iterator cogitant::Set< SetContent >::end | ( | ) | const |
Retourne un itérateur de fin pour le parcours de l'ensemble.
Referenced by cogitant::Graph::end().
|
virtual |
Suppression d'un élément à l'ensemble.
Recherche l'occurence égale à c et la supprime. Tous les identificateurs et itérateurs repérant un élément situé après celui qui a été supprimé deviennent incohérents.
|
pure virtual |
Ajout d'un élément à l'ensemble.
ExceptionAlreadyPresent |
Implemented in cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.
|
inline |
Retourne un identificateur de début pour le parcours de l'ensemble.
|
pure virtual |
Suppression d'un élément à l'ensemble.
Après suppression l'identificateur repère l'élément qui suit celui qui a été supprimé. Tous les autres identificateurs et itérateurs repérant un élément situé après celui qui a été supprimé deviennent incohérents.
ExceptionISetOutOfBounds |
Implemented in cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.
|
inline |
Retourne un identificateur de fin pour le parcours de l'ensemble.
|
virtual |
Recherche d'un élément dans l'ensemble.
c | élément recherché (l'opérateur == doit être défini sur SetContent). |
Reimplemented in cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.
|
pure virtual |
Accès à un élément de l'ensemble.
i | un identificateur sur l'ensemble. |
ExceptionISetOutOfBounds |
Implemented in cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.
Referenced by cogitant::Graph::nodes(), and cogitant::Environment::objects().
|
pure virtual |
Accès à un élément de l'ensemble.
i | un identificateur sur l'ensemble. |
ExceptionISetOutOfBounds |
Implemented in cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.
|
inline |
Incrémente l'identificateur passé pour le parcours de l'ensemble.
|
virtual |
Remplace la valeur d'un élément par une autre valeur.
i | identificateur de l'élément dont la valeur doit être remplacée. |
v | nouvelle valeur. |
Reimplemented in cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.
|
protectedvirtual |
Vérification de la validité d'un itérateur.
|
pure virtual |
Taille maximale de l'ensemble.
Implemented in cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.
SetContent& cogitant::Set< SetContent >::operator[] | ( | iSet< SetContent > | i | ) |
Opérateur d'accès.
Permet l'accès direct à un élément à partir de son identificateur. Cet appel est strictement équivalent à iGetContent().
SetContent const& cogitant::Set< SetContent >::operator[] | ( | iSet< SetContent > | i | ) | const |
Opérateur d'accès.
Permet l'accès direct à un élément à partir de son identificateur. Cet appel est strictement équivalent à iGetContent().
|
pure virtual |
Réservation d'espace dans l'ensemble.
Dans le cas où l'ensemble est représenté par un vector
, il peut être très intéressant pour des raisons de performances de dimensionner le vector
au nombre maximum d'éléments pouvant être contenus dans l'ensemble. L'appel à cette méthode n'est donc pas obligatoire (le Set doit toujours se redimensionner automatiquement) mais peut provoquer un gain de performances selon l'implémentation de la structure de données.
Implemented in cogitantcs::SetClientEnvironmentObject, cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.
|
pure virtual |
Taille actuelle de l'ensemble.
Implemented in cogitant::Set_Simple< SetContent >, and cogitant::Set_Simple< cogitant::EnvironmentObject *>.