Syntaxe...
Description...
Exemple...
Voir aussi...
Traduction...
Attribut de l'instruction Type
. Définition de l'allocation d'un objet du type courant.
Allouer
Allouer
permet de déclarer une méthode spéciale dont le but est d'allouer un nouvel objet du type courant.
Les demandes d'allocation des objets sont gérées statiquement ou dynamiquement par Up ! Compiler selon le contexte. Les demandes d'allocations font appel à la méthode spéciale Allouer
. 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 allocation. En ce cas, il s'agit d'une méthode fonctionnelle sans paramètre dont le type du résultat est le type courant.
Cette méthode doit être privée.
Si la méthode Allouer
est définie, la méthode Liberer doit l'être également.
Revenir en haut de la page...
Type A
/****/
C1 : Entier;
Prive :
C2 : Reel;
Fonction Allouer() Retourner A;
Fin Type
Procedure Liberer(P1 : A);
/* Le type A possede un allocateur et un desallocateur. */
Prive :
Type CacheA
/*********/
Element : ReferenceDe Nul Ou A;
Fin Type
EstLibre : Booleen;
/* Definition d'un allocateur de A. */
Variable
Prive :
TableauCacheA : Tableau[100] De CacheA;
Prive :
Fonction A.Allouer() Retourner A
/******************************/
/* Definition de l'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. */
/* Une valeur est libre dans le cache mais l'element A n'a pas ete allouee. */
TableCacheA[I].Libre=Faux;
SinonSi TableCacheA[I].Libre Et TableCacheA[I].Element==Nul Alors
Retourner TableCacheA[I].Element;
Fin Pour
TableCacheA[I].Element=A.Allouer();
Fin Si
TableCacheA[I].Libre=Faux;
Retourner TableCacheA[I].Element;
/* Plus de place dans le cache. */
Retourner Nul;
Fin Fonction
Procedure A.Liberer(P1 : A)
/*************************/
/* Definition du desallocateur de A. */
Variable
I:Entier;
Debut
Pour I=0 JusquA 99 Faire
Si TableCacheA[I].Element==A Alors
Fin Pour
TableCacheA[I].Libre=Vrai;
Fin Si
Retourner;
Fin Procedure
Principal
/*******/
Variable
I : Entier;
Debut
/* Initialisation du cache. */
Pour I=0 JusquA 99 Faire
TableCacheA[I].Libre=Vrai;
Fin Pour
...
Fin Principal
Zuteilen | Allocate | 分配 | Asignar | - | - | - | - |