package gestionProc; import java.util.LinkedList; import java.util.Iterator; /** * Gere les processus avec une file mais cette fois ci trie par ordre decroissant */ public class ProcessusPrio implements ProcessusList { /*@ public invariant (\forall int i; 0 <= i && i < (plist.size() - 1); ((Processus)plist.get(i)).getPriorite() >= ((Processus)plist.get(i+1)).getPriorite()); @ // Assure que la file est toujours bien triée @*/ private LinkedList maListe; /*@ in plist; @*/ /*@ private represents plist <- maListe; @*/ /** Construit une file de processus vide */ /*@ @ ensures plist.size() == 0; @*/ public ProcessusPrio() { maListe = new LinkedList(); } /** * Ajoute le processus p a la bonne place dans la file */ public void ajouterProcessus(Processus p) { if (empty()) maListe.add(p); else { int place=0; boolean inserer = false; Iterator it = maListe.iterator(); while ( it.hasNext() && ! inserer ) { Processus tmp = (Processus)it.next(); if( p.getPriorite() > tmp.getPriorite()) { maListe.add(place,p); inserer=true; } place++; } if(!inserer) maListe.addLast(p); } } /** * Test si le processus p appartient a la file de processus */ public boolean contientProcessus(Processus p) { return maListe.contains(p); } /** * Test si la file de processus est vide ou non */ public boolean empty() { return maListe.isEmpty(); } /** * Retourne le nombre d'elements (Processus) de la file */ public int nbElem() { return maListe.size(); } /** * Retire le processus ayant la plus forte priorite, donc la queue de la file */ /*@ also @ @ requires \same; @ @ ensures (\forall int i; 0 <= i && i < plist.size(); plist.get(i) == \old(plist.get(i+1))); @ ensures \result == plist.get(0); @*/ public Processus retirerProcessus() { return (Processus)maListe.removeFirst(); } /** Affiche le contenu de la file */ /*@ also @ ensures \result != null && \result.length() > 0; @*/ public String toString() { if(maListe.isEmpty()) return "file vide"; String res = ""; Iterator it = maListe.iterator(); while(it.hasNext()) res += ((Processus)it.next()).toString()+"\n"; return res; } }