Class NumberRingBuffer

java.lang.Object
de.bsvrz.sys.funclib.losb.ringbuffer.NumberRingBuffer

public class NumberRingBuffer
extends java.lang.Object
Der 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[] 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

    Constructors
    Constructor Description
    NumberRingBuffer​(int chnkSize, int mxSize)  
  • Method Summary

    Modifier and Type Method Description
    protected void adjustSizePostDecr()  
    protected void adjustSizePreIncr()  
    void changeMaxSize​(int delta)
    Aendert die Maximale Groesse um den angegebenen Wert
    protected void copy2NewArray​(int newSize)  
    boolean isEmpty()  
    protected boolean isFirstElemOneAheadOfLastElem()  
    boolean isFull()
    Zeigt ob der Buffer vollständig gefüllt ist.
    int maxSize()  
    protected int oneStepFurther​(int ptr)  
    int pop()
    Liefert das erste Element der Warteschlange.
    boolean push​(int elem)
    Fügt ein Objekt in die Warteschlange an letzter Stelle ein.
    int size()  
    java.lang.String status()  

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • 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 Details

    • 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 ist 16.
      mxSize - Maximale Groesse der Warteschlange. Wird diese ueberschritten, liefert push(int) false. Wenn dieser Parameter UNBOUNDED_SIZE ist, ist die Groesse unbegrenzt.
  • Method Details

    • 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.InterruptedException
      Liefert 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:
      true falls der Buffer vollständig gefüllt.false sonst.