1 package ch.hslu.exercises.sw06.ex4; 2 3 /** 4 * Puffer (First In First Out) mit einer begrenzten Kapazität. Der Puffer ist thread sicher. 5 * 6 * @param <T> Element Typ. 7 */ 8 public interface Buffer<T> { 9 10 /** 11 * Ein Element T speichern. Falls der Puffer voll ist, warten bis ein Platz frei wird. 12 * 13 * @param elem zu speicherndes Element. 14 * @throws InterruptedException wenn das Warten unterbrochen wird. 15 */ 16 void add(final T elem) throws InterruptedException; 17 18 /** 19 * Ein Element T speichern oder nach einem Timeout abbrechen. Falls der Puffer voll ist, warten 20 * bis ein Platz frei wird. 21 * 22 * @param elem zu speicherndes Element. 23 * @param millis Timeout bis zum Abbruch. 24 * @return true, wenn Element gespeichert wurde, false, wenn Timeout eingetreten ist. 25 * @throws InterruptedException wenn das Warten unterbrochen wird. 26 */ 27 boolean add(final T elem, final long millis) throws InterruptedException; 28 29 /** 30 * Liest und entfernt ein Element. Falls der Puffer leer ist, warten bis ein Platz belegt wird. 31 * 32 * @return gelesenes Element. 33 * @throws InterruptedException falls das Warten unterbrochen wird. 34 */ 35 T remove() throws InterruptedException; 36 37 /** 38 * Liest und entfernt ein Element oder nach einem Timeout abbrechen. Falls der Puffer leer ist, 39 * warten bis ein Platz belegt wird. 40 * 41 * @param millis Timeout bis zum Abbruch. 42 * @return gelesenes Element. 43 * @throws InterruptedException falls das Warten unterbrochen wird. 44 */ 45 T remove(final long millis) throws InterruptedException; 46 47 /** 48 * Gibt, ob der Puffer leer ist. 49 * 50 * @return true wenn der Puffer leer ist, sonst false. 51 */ 52 boolean empty(); 53 54 /** 55 * Gibt, ob der Puffer voll ist. 56 * 57 * @return true wenn der Puffer voll ist, sonst false. 58 */ 59 boolean full(); 60 61 /** 62 * Gibt die Anzahl im Puffer gespeicherten Elemente zurück. 63 * 64 * @return Anzahl Elemente. 65 */ 66 int size(); 67 }