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 }