-
Notifications
You must be signed in to change notification settings - Fork 0
/
lca.ads
74 lines (49 loc) · 2.28 KB
/
lca.ads
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
with SDA_Exceptions; use SDA_Exceptions;
-- Définition de structures de données associatives sous forme d'une liste
-- chaînée associative (LCA).
generic
type T_Cle is private;
type T_Donnee is private;
package LCA is
type T_Cellule;
type T_LCA is access T_Cellule;
type T_Cellule is record
donnee: T_Donnee;
cle: T_Cle;
Suivant:T_LCA;
end record;
-- Initialiser une Sda. La Sda est vide.
procedure Initialiser(Sda: out T_LCA) with
Post => Est_Vide (Sda);
-- Est-ce qu'une Sda est vide ?
function Est_Vide (Sda : in T_LCA) return Boolean;
-- Obtenir le nombre d'éléments d'une Sda.
function Taille (Sda : in T_LCA) return Integer with
Post => Taille'Result >= 0
and (Taille'Result = 0) = Est_Vide (Sda);
-- Enregistrer une Donnée associée à une Clé dans une Sda.
-- Si la clé est déjà présente dans la Sda, sa donnée est changée.
procedure Enregistrer (Sda : in out T_LCA ; Cle : in T_Cle ; Donnee : in T_Donnee) with
Post => Cle_Presente (Sda, Cle)
and then (La_Donnee (Sda, Cle) = Donnee) -- donnée insérée
-- and then (if not (Cle_Presente (Sda, Cle)'Old) then Taille (Sda) = Taille (Sda)'Old)
-- and then (if Cle_Presente (Sda, Cle)'Old then Taille (Sda) = Taille (Sda)'Old + 1)
;
-- Supprimer la Donnée associée à une Clé dans une Sda.
-- Exception : Cle_Absente_Exception si Clé n'est pas utilisée dans la Sda
procedure Supprimer (Sda : in out T_LCA ; Cle : in T_Cle) with
Post => Taille (Sda) = Taille (Sda)'Old - 1 -- un élément de moins
and not Cle_Presente (Sda, Cle); -- la clé a été supprimée
-- Savoir si une Clé est présente dans une Sda.
function Cle_Presente (Sda : in T_LCA ; Cle : in T_Cle) return Boolean;
-- Obtenir la donnée associée à une Cle dans la Sda.
-- Exception : Cle_Absente_Exception si Clé n'est pas utilisée dans l'Sda
function La_Donnee (Sda : in T_LCA ; Cle : in T_Cle) return T_Donnee;
-- Supprimer tous les éléments d'une Sda.
procedure Vider (Sda : in out T_LCA) with
Post => Est_Vide (Sda);
-- Appliquer un traitement (Traiter) pour chaque couple d'une Sda.
generic
with procedure Traiter (Cle : in T_Cle; Donnee: in T_Donnee);
procedure Pour_Chaque (Sda : in T_LCA);
end LCA;