------------------------------------------------------------------------------------------ -- Auteur : Normand Seguin -- Date : Aout 2001 -- Sujet : Module GENERIQUE de specification des operations de base sur une file -- Note : - Implantation dynamique -- - TYPE FILE est privé -- - TYPE de l'element est determine (generique) au moment de l'instanciation ------------------------------------------------------------------------------------------ GENERIC -- Section des paramètres TYPE Type_Element IS Private; -- Le contenu de la file peut être de tous types PACKAGE File_D IS TYPE File IS Limited Private; -- Le nom du type est public, mais pas sa définition -- Declarations des operations sur la File PROCEDURE Creer_File (F : OUT File); -- Initialiser la File a vide FUNCTION File_Vide (F : IN File) Return Boolean; -- Verification si la file est vide -- True -> File est vide FUNCTION Premier (F : IN File) Return Type_Element; -- Retourne la valeur du premier element de la File -- Une erreur (Erreur_File_Vide) sera levee si la file est vide PROCEDURE Enfiler (F : IN OUT File; Element : IN Type_Element); -- Ajouter un element a la file -- L'erreur Erreur_File_Pleine peut être levée s'il n'y a plus -- de possibilité d'ajouter de nouveaux éléments à la file PROCEDURE Defiler (F : IN OUT File; Element : OUT Type_Element); -- Retourner l'element au debut de la file et le retirer de la file -- Erreur File_Vide sera levee si la file est vide a l'appel de Defiler PROCEDURE Detruire_File (F : IN OUT File); -- Detruire la file Erreur_File_Pleine : Exception; -- Si le nombre maximum d'elements de la file est atteint Erreur_File_Vide : Exception; -- Si on effectue une operation interdite sur une file vide PRIVATE -- Definition du type prive File TYPE Noeud; TYPE PtrNoeud IS ACCESS Noeud; TYPE Noeud IS Record Element : Type_Element; Suivant : PtrNoeud; End Record; TYPE File IS Record -- une file est compose de deux indicateurs Tete : PtrNoeud; -- sur le premier noeud de la file Fin : PtrNoeud; -- sur le dernier noeud de la file End Record; END File_D;