package gestionProc; import java.util.List; /** Repr'esentation d'une liste contenant des processus non nuls.
Une telle liste ne contient pas deux processus de meme identifiant.
Il est possible : * @author M. Nebut * @version 02/05 */ public interface ProcessusList { /** Invariant de classe */ /*@ public invariant plist != null; @*/ /*@ public model instance List plist; @*/ /** Retourne vrai si cette liste de processus est vide. * @return vrai si le nombre d''el'ements de cette liste vaut 0 */ /*@ @ ensures \result <==> plist.isEmpty(); @*/ public /*@ pure @*/ boolean empty(); /** Retourne le nombre d''el'ements de cette liste de processus. * @return le nombre d''el'ements de cette liste */ /*@ @ ensures \result == plist.size(); @*/ public /*@ pure @*/ int nbElem(); /** Ajoute le processus p dans cette liste de * processus. M'ethode non-d'eterministe : l'emplacement de * l'insertion n'est pas pr'ecis'e. * @param p un processus `a ajouter `a la liste */ /*@ @ requires p != null; @ requires ! plist.contains(p); @ @ assignable plist; @ @ ensures \old(plist.size()) == plist.size() - 1; // La taille a augmenté d'un @ ensures (\forall int i; i >= 0 && i < \old(plist.size()); plist.contains(\old(plist.get(i)))); // Pas de modifications dans la liste @ ensures plist.contains(p); // L'élément a bien été ajouté @*/ public void ajouterProcessus(Processus p); /** Retire un processus de cette liste et le retourne. M'ethode * non-d'eterministe : ne pr'ecise pas quel processus est retir'e. * @return un processus de la liste */ /*@ requires ! empty(); @ assignable plist; @ @ ensures \old(plist.size()) == plist.size() + 1; // La taille a diminué d'un @ ensures (\forall int i; i >= 0 && i < \old(plist.size()); \old(plist.get(i)).equals(\result) || plist.contains(\old(plist.get(i)))); // La liste n'a pas changé @ ensures ! plist.contains(\result); // On n'a plus l'élément retourné @*/ public Processus retirerProcessus(); /** Retourne vrai si cette liste contient le processus p. * @param p le processus dont on souhaite tester l'appartenance `a cette liste. * @return vrai si p appartient `a cette liste de processus */ /*@ @ requires p != null; @ @ ensures \result <==> plist.contains(p); @*/ public /*@ pure @*/ boolean contientProcessus(Processus p); }