-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathth.ads
69 lines (45 loc) · 2.29 KB
/
th.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
with LCA;
generic
type T_Cle is private;
type T_Donnee is private;
Capacite: Integer;
with function funct_hachage (Cle: in T_Cle) return Integer;
package TH is
package th_lca is New LCA (T_Cle => T_Cle, T_Donnee => T_Donnee);
use th_lca;
type T_TH is array (1 .. Capacite) of T_LCA;
-- Initialiser une Sda. La Sda est vide.
procedure Initialiser(Sda: out T_TH) with
Post => Est_Vide (Sda);
-- Est-ce qu'une Sda est vide ?
function Est_Vide (Sda : in T_TH) return Boolean;
-- Obtenir le nombre d'éléments d'une Sda.
function Taille (Sda : in T_TH) 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_TH ; 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_TH ; 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_TH ; 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_TH ; Cle : in T_Cle) return T_Donnee;
-- Supprimer tous les éléments d'une Sda.
procedure Vider (Sda : in out T_TH) 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_TH);
end TH;