Type
. Définition de la désallocation d'un objet du type courant
Liberer
Liberer
permet de déclarer une méthode spéciale dont le but est libérer un objet inutile du type courant.
Les demandes de désallocation des objets sont gérées statiquement ou dynamiquement par le générateur selon le contexte. Les demandes de désallocations font appel à la méthode spéciale Liberer
. Par défaut, cette méthode est celle du noyau d'exécution qui est générique pour tous les types. Il est néanmoins possible de se définir sa propre méthode désallocation. En ce cas, il s'agit d'une procédure qui a un paramètre dont le type est le type courant.
Cette méthode doit être privée.
Si la méthode Liberer
est définie, la méthode Allouer doit l'être également.
Cette méthode est automatiquement synchronisée par une déclaration implicite de l'inflexion Synchroniser. L'accès aux propriétés de l'objet est direct, ce qui permet d'améliorer nettement les performances.
Type A
/****/
C1 : Entier;
C2 : Reel;
Prive :
Fonction Allouer() Retourner A;
Procedure Liberer(P1 : A);
Fin Type
/* Le type A possede un allocateur et un desallocateur. */
Prive :
Type CacheA
/*********/
Element : ReferenceDe Nul Ou A;
EstLibre : Booleen;
Fin Type
/* Definition d'un allocateur de A. */
Variable
/******/
Prive :
TableauCacheA : Tableau[100] De CacheA;
Prive :
/****************************************************************/
Fonction A.Allouer() Retourner A
/* Objet : Allocateur de A. */
/****************************************************************/
Variable
/******/
I : Entier;
Debut
Pour I=0 JusquA 99 Faire
Si TableCacheA[I].Libre Et TableCacheA[I].Element!=Nul Alors
/* Une valeur reallouee est libre dans le cache. */
TableCacheA[I].Libre=Faux;
Retourner TableCacheA[I].Element;
SinonSi TableCacheA[I].Libre Et TableCacheA[I].Element==Nul Alors
/* Une valeur est libre dans le cache mais l'element A n'a pas ete allouee. */
TableCacheA[I].Element=A.Allouer();
TableCacheA[I].Libre=Faux;
Retourner TableCacheA[I].Element;
Fin Si
Fin Pour
/* Plus de place dans le cache. */
Retourner Nul;
Fin Fonction
/****************************************************************/
Procedure A.Liberer(P1 : A)
/* Objet : Definition du desallocateur de A. */
/****************************************************************/
Variable
/******/
I : Entier;
Debut
Pour I=0 JusquA 99 Faire
Si TableCacheA[I].Element==A Alors
TableCacheA[I].Libre=Vrai;
Retourner;
Fin Si
Fin Pour
Fin Procedure
Principal
/*******/
Variable
/******/
I : Entier;
Debut
/* Initialisation du cache. */
Pour I=0 JusquA 99 Faire
TableCacheA[I].Libre=Vrai;
Fin Pour
...
Fin Principal
- | - | - | - | - | - | - | - | - |