------------------------------------------------------------------------------------------------
-- Nom fichier      : List_Cd.ads                                                             --
-- Auteur           : L. Chaboudez - V. Decorges - J. Burdy                                   --
-- Date             : 29 Mars 2001                                                            --
--                                                                                            --
-- But              : Paquetage permettant de gerer une liste d'elements doublement chaine par--
--                     des pointeurs.
--                                                                                            --
--                                                                                            --
-- Date de modif.   :                                                                         --
-- Raison           :                                                                         --
-- Modules appeles  :                                                                         --
-- Mat. particulier :                                                                         --
--                                                                                            --
-- Compilation      :                                                                         --
-- Edition de liens :                                                                         --
-- Mode d'execution :                                                                         --
------------------------------------------------------------------------------------------------

package Liste_Cd is
  
   -- Longueur max pour l'element T_Info
   Longueur_Max : constant := 10 ;
   
   -- Les informations de la liste
   subtype T_Info is String ( 1..Longueur_Max );     
   
   -- Les cellules de la liste
   type Cellule;                   
   
   -- Type des chainages
   type Liste is access Cellule;  
   
   -- Les cellules de la liste
   type Cellule is 
      record                 
         Info  : T_Info;     -- L'information
         Apres : Liste ;     -- Lien sur la cellule qui suit
         Avant : Liste ;     -- Lien sur la cellule qui precede
      end record;
  

    -- Exception qui est propagee quelque soit le probleme rencontre lors
    --  d'operations realisees sur les listes
    Erreur_Liste_Cd : exception;
    
    -- Insere un nouvel element en tete de la liste transmise par le parametre "Tete"
    --  ce nouvel element contient comme information la "Valeur" transmise en parametre
    procedure Inserer ( Valeur : in T_Info; Tete : in out Liste );
   
    -- Supprime l'element en tete de la liste transmise en parametre par "Tete", en
    --  restituant proprement au systeme la place liberee; l'information qui se
    --  trouvait dans cette cellule est livree dans le parametre "Valeur"
    --  Si l'operation n'est pas possible, lever l'exception des listes
    procedure Supprimer ( Tete : in out Liste; Valeur : out T_Info );
    
    -- Afficher a l'ecran toutes les valeurs de la liste designee par "Tete",
    --  a raison d'une valeur par ligne
    procedure Put ( Tete : in Liste );
    
    -- Fonction booleenne qui indique si la liste transmise en parametre par "Tete"
    --  est triee dans un ordre croissant ou pas
    function Est_Triee ( Tete : in Liste ) return Boolean;
    
    -- Fonction booleenne qui indique si la liste transmise en parametre par "Tete"
    --  est vide ou pas    
    function Est_Vide (Tete : in Liste ) return Boolean;
    
    -- A trie dans un ordre croissant les valeurs de la liste designee par "Tete",
    procedure Trier ( Tete : in out Liste );

end Liste_Cd;
