Class NumberRingBuffer
- java.lang.Object
-
- de.bsvrz.sys.funclib.losb.ringbuffer.NumberRingBuffer
-
public class NumberRingBuffer extends java.lang.ObjectDer FIFO-Ringpuffer ist über einem Feld von int 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
Fields Modifier and Type Field Description protected int[]bufprotected intchunkSizeGröße der Blöckeprotected intfirstElemZeiger auf Beginn und Ende des Ringpuffersprotected booleanisEmptyprotected intlastElemZeiger auf Beginn und Ende des Ringpuffersprotected intmaxSizeMaximale Größe der Warteschlangestatic intMIN_CHUNK_SIZEMinimale Blockgroesseprotected intnoOfChunksAnzahl der Blöckestatic intUNBOUNDED_SIZEMinimale Blockgroesse
-
Constructor Summary
Constructors Constructor Description NumberRingBuffer(int chnkSize, int mxSize)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidadjustSizePostDecr()protected voidadjustSizePreIncr()voidchangeMaxSize(int delta)Aendert die Maximale Groesse um den angegebenen Wertprotected voidcopy2NewArray(int newSize)booleanisEmpty()protected booleanisFirstElemOneAheadOfLastElem()booleanisFull()Zeigt ob der Buffer vollständig gefüllt ist.intmaxSize()protected intoneStepFurther(int ptr)intpop()Liefert das erste Element der Warteschlange.booleanpush(int elem)Fügt ein Objekt in die Warteschlange an letzter Stelle ein.intsize()java.lang.Stringstatus()
-
-
-
Field Detail
-
MIN_CHUNK_SIZE
public static final int MIN_CHUNK_SIZE
Minimale Blockgroesse- See Also:
- Constant Field Values
-
UNBOUNDED_SIZE
public static final int UNBOUNDED_SIZE
Minimale Blockgroesse- See Also:
- Constant Field Values
-
firstElem
protected int firstElem
Zeiger auf Beginn und Ende des Ringpuffers
-
lastElem
protected int lastElem
Zeiger auf Beginn und Ende des Ringpuffers
-
noOfChunks
protected int noOfChunks
Anzahl der Blöcke
-
chunkSize
protected int chunkSize
Größe der Blöcke
-
maxSize
protected int maxSize
Maximale Größe der Warteschlange
-
buf
protected int[] buf
-
isEmpty
protected boolean isEmpty
-
-
Constructor Detail
-
NumberRingBuffer
public NumberRingBuffer(int chnkSize, int mxSize)- Parameters:
chnkSize- Größe der Blöcke, um die das Feld der Warteschlange wächst und schrumpft. Die empfohlene Mindestgröße für diesen Parameter ist16.mxSize- Maximale Groesse der Warteschlange. Wird diese ueberschritten, liefertpush(int)false. Wenn dieser ParameterUNBOUNDED_SIZEist, ist die Groesse unbegrenzt.
-
-
Method Detail
-
maxSize
public int maxSize()
- Returns:
- Maximale Groesse der Warteschlange oder
UNBOUNDED_SIZE.
-
changeMaxSize
public void changeMaxSize(int delta)
Aendert die Maximale Groesse um den angegebenen Wert- Parameters:
delta- positiv oder negativ
-
push
public boolean push(int elem)
Fügt ein Objekt in die Warteschlange an letzter Stelle ein. Ein Thread, der in pop() wartet, wird fortgesetzt.- Parameters:
elem- Einzufügendes Objekt- Returns:
- Wahr, wenn Platz in der Queue war und das Datum eingefuegt wurde, falsch sonst
-
pop
public int pop() throws java.lang.InterruptedExceptionLiefert das erste Element der Warteschlange. Wenn die Warteschlange leer ist, blockiert der aufrufende Thread bis zum nächsten pop()-Aufruf.- Returns:
- Das erste Element der Warteschlange.
- Throws:
java.lang.InterruptedException
-
status
public java.lang.String status()
-
size
public int size()
-
isEmpty
public boolean isEmpty()
-
adjustSizePreIncr
protected void adjustSizePreIncr()
-
adjustSizePostDecr
protected void adjustSizePostDecr()
-
copy2NewArray
protected void copy2NewArray(int newSize)
-
oneStepFurther
protected int oneStepFurther(int ptr)
-
isFirstElemOneAheadOfLastElem
protected boolean isFirstElemOneAheadOfLastElem()
-
isFull
public boolean isFull()
Zeigt ob der Buffer vollständig gefüllt ist.- Returns:
truefalls der Buffer vollständig gefüllt.falsesonst.
-
-