E
- Typ der Elemente im Ringpuffer.public class RingBuffer<E> extends Object
Modifier and Type | Field and Description |
---|---|
protected Object[] |
buf |
private int |
chnkDecreases |
private int |
chnkIncreases |
protected int |
chunkSize
Größe der Blöcke
|
protected int |
firstElem
Zeiger auf Beginn und Ende des Ringpuffers
|
protected boolean |
isEmpty |
protected int |
lastElem
Zeiger auf Beginn und Ende des Ringpuffers
|
protected int |
maxSize
Maximale Größe der Warteschlange
|
private static int |
MIN_CHUNK_NO
Anzahl der Blöcke die initial angelegt und nicht unterschritten wird
|
static int |
MIN_CHUNK_SIZE
Minimale Blockgroesse
|
protected int |
noOfChunks
Anzahl der Blöcke
|
private static int |
REM_CHUNK_THRESHOLD
Blöcke werden gelöscht, wenn mindestens diese Zahl an Blöcken ungenutzt ist
|
static int |
UNBOUNDED_SIZE
Minimale Blockgroesse
|
Constructor and Description |
---|
RingBuffer(int chnkSize,
int mxSize) |
Modifier and Type | Method and Description |
---|---|
protected void |
adjustSizePostDecr() |
protected void |
adjustSizePreIncr() |
void |
changeMaxSize(int delta)
Aendert doe Maximale Groesse um den angegebenen Wert
|
protected void |
copy2NewArray(int newSize) |
private E |
directPop() |
E |
getLast()
Liefert das zuletzt eingefügte Element.
|
boolean |
isEmpty() |
protected boolean |
isFirstElemOneAheadOfLastElem() |
boolean |
isFull()
Zeigt ob der Buffer vollständig gefüllt ist.
|
int |
maxSize() |
E |
next()
Liefert den zweitobersten Datensatz zurück.
|
protected int |
oneStepFurther(int ptr) |
E |
peek()
Liefert das erste Element der Warteschlange ohne es zu entfernen.
|
E |
pop()
Liefert das erste Element der Warteschlange.
|
E |
pop(long timeout)
Liefert das erste Element der Warteschlange.
|
E |
popNoWait()
Liefert das erste Element der Warteschlange oder
null wenn keins vorhanden ist. |
boolean |
push(E elem)
Fügt ein Objekt in die Warteschlange an letzter Stelle ein.
|
int |
size() |
String |
status()
Informmationsausgabe.
|
E[] |
toArray(E[] newBuf)
Kopiert den Inhalt des Ringpuffers in eine Liste.
|
public static final int MIN_CHUNK_SIZE
public static final int UNBOUNDED_SIZE
private static final int MIN_CHUNK_NO
private static final int REM_CHUNK_THRESHOLD
protected int firstElem
protected int lastElem
protected int noOfChunks
protected int chunkSize
protected int maxSize
protected Object[] buf
protected boolean isEmpty
private int chnkIncreases
private int chnkDecreases
public RingBuffer(int chnkSize, int mxSize)
chnkSize
- Größe der Blöcke, um die das Feld der Warteschlange wächst und schrumpft. Die empfohlene Mindestgröße für diesen Parameter ist
16
.mxSize
- Maximale Groesse der Warteschlange. Wird diese ueberschritten, liefert push(Object)
false. Wenn dieser Parameter UNBOUNDED_SIZE
ist, ist die Groesse unbegrenzt.public int maxSize()
UNBOUNDED_SIZE
.public void changeMaxSize(int delta)
delta
- positiv oder negativpublic boolean push(E elem)
elem
- Einzufügendes Objektpublic E pop() throws InterruptedException
InterruptedException
public E pop(long timeout) throws InterruptedException
timeout
- Wartezeit, nach der die Aktion abgebrochen wird.null
, falls kein Element in der vorgegebenen Zeit engetroffen ist.InterruptedException
public E popNoWait()
null
wenn keins vorhanden ist.null
private E directPop()
public E peek()
null
falls der Puffer leer ist.public E getLast()
null
falls RingBuffer leer.public String status()
public int size()
public boolean isEmpty()
true
falls sich keine Elemente im Ringpuffer befinden.protected void adjustSizePreIncr()
protected void adjustSizePostDecr()
protected void copy2NewArray(int newSize)
protected int oneStepFurther(int ptr)
protected boolean isFirstElemOneAheadOfLastElem()
public boolean isFull()
true
falls der Buffer vollständig gefüllt.false
sonst.public E[] toArray(E[] newBuf)
newBuf
- Array in den das Ergebnis kopiert werden soll. Ist das Array zu klein, wird ein neues angelegt.public E next()
null
falls weniger als zwei Datensätze im Ringpuffer sind.