|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectde.bsvrz.sys.funclib.losb.ringbuffer.RingBuffer<E>
E
- Typ der Elemente im Ringpuffer.public class RingBuffer<E>
Der FIFO-Ringpuffer ist über einem Feld von Objektreferenzen angelegt. Die Gesamtkapazität ist festgelegt oder unbegrenzt, wobei das zugrunde liegende Feld stets durch Blöcke fester Größe erweitert oder reduziert wird. Wenn die Gesamtkapazität gleich der Blockgroesse ist, wird das zugrundeliegende Feld nicht veraendert. Die Einfüge- und Ausleseoperationen sind im den Regelfall von konstantem Aufwand und von proportional zur Puffergröße ansteigendem Auf-wand, falls ein neuer Block angefügt oder gelöscht werden muss. Die Einfüge-/Ausleseoperationen des Regelfalles benötigen nur wenige elementare Anweisungen. Es sind keine Speicheroperationen notwendig und es entsteht auch keine Arbeit für den Garbage Collector. Falls die Feldgröße verändert werden muss, kommt der Aufwand für das Kopieren des gesamten Feldes hinzu. Ein Block wird nur dann gelöscht, wenn eine bestimmte Anzahl Blöcke ungenutzt sind. Dadurch werden oszillierende Felder vermieden, wenn der Füllgrad um eine Blockgrenze pendelt. Die Warteschlangen dienen darüber hinaus zur Synchronisation des produzierenden Prozesses (ruft push() auf) und des verarbeitenden Prozesses (ruft pop() auf).
Field Summary | |
---|---|
protected java.lang.Object[] |
buf
|
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 |
static int |
MIN_CHUNK_SIZE
Minimale Blockgroesse |
protected int |
noOfChunks
Anzahl der Blöcke |
static int |
UNBOUNDED_SIZE
Minimale Blockgroesse |
Constructor Summary | |
---|---|
RingBuffer(int chnkSize,
int mxSize)
|
Method Summary | |
---|---|
protected void |
adjustSizePostDecr()
|
protected void |
adjustSizePreIncr()
|
void |
changeMaxSize(int delta)
Aendert doe Maximale Groesse um den angegebenen Wert |
protected void |
copy2NewArray(int newSize)
|
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()
|
java.lang.String |
status()
Informmationsausgabe. |
E[] |
toArray(E[] newBuf)
Kopiert den Inhalt des Ringpuffers in eine Liste. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final int MIN_CHUNK_SIZE
public static final int UNBOUNDED_SIZE
protected int firstElem
protected int lastElem
protected int noOfChunks
protected int chunkSize
protected int maxSize
protected java.lang.Object[] buf
protected boolean isEmpty
Constructor Detail |
---|
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.Method Detail |
---|
public int maxSize()
UNBOUNDED_SIZE
.public void changeMaxSize(int delta)
delta
- positiv oder negativpublic boolean push(E elem)
elem
- Einzufügendes Objekt
public E pop() throws java.lang.InterruptedException
java.lang.InterruptedException
public E pop(long timeout) throws java.lang.InterruptedException
timeout
- Wartezeit, nach der die Aktion abgebrochen wird.
null
, falls kein Element in
der vorgegebenen Zeit engetroffen ist.
java.lang.InterruptedException
public E popNoWait()
null
wenn keins vorhanden
ist.
null
public E peek()
null
falls der Puffer
leer ist.public E getLast()
null
falls RingBuffer leer.public java.lang.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.
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |