Class ShortRingBuffer

java.lang.Object
io.deephaven.base.ringbuffer.ShortRingBuffer
All Implemented Interfaces:
Serializable

public class ShortRingBuffer extends Object implements Serializable
A simple circular buffer for primitive values, like java.util.concurrent.ArrayBlockingQueue but without the synchronization and collection overhead. Storage is between head (inclusive) and tail (exclusive) using incrementing long values. Head and tail will not wrap around; instead we use storage arrays sized to 2^N to allow fast determination of storage indices through a mask operation.
See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    class 
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    ShortRingBuffer(int capacity)
    Create an unbounded-growth ring buffer of short primitives.
    ShortRingBuffer(int capacity, boolean growable)
    Create a ring buffer of short primitives.
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    add(short e)
    Adds an entry to the ring buffer, will throw an exception if buffer is full.
    short
    addOverwrite(short e, short notFullResult)
    Add an entry to the ring buffer.
    void
    addUnsafe(short e)
    Add values without overflow detection.
    short
    Returns the element at the tail of the ring buffer
    int
     
    void
     
    protected void
    copyRingBufferToArray(short[] dest)
    Copy the contents of the buffer to a destination buffer.
    short
    If the ring buffer is non-empty, returns the element at the head of the ring buffer.
    void
    ensureRemaining(int count)
    Ensure that there is sufficient empty space to store count items in the buffer.
    short
    Returns the element at the head of the ring buffer
    short
    front(int offset)
    Returns the element at the specified offset in the ring buffer.
    short[]
    Make a copy of the elements in the ring buffer.
    protected void
    grow(int increase)
    Increase the capacity of the ring buffer.
    boolean
     
    boolean
     
    Create an iterator for the ring buffer
    boolean
    offer(short e)
    Attempt to add an entry to the ring buffer.
    short
    peek(short onEmpty)
    If the ring buffer is non-empty, returns the element at the head of the ring buffer.
    short
    peekBack(short onEmpty)
    If the ring buffer is non-empty, returns the element at the tail of the ring buffer.
    short
    poll(short onEmpty)
    If the ring buffer is non-empty, removes the element at the head of the ring buffer.
    int
     
    short
    Remove one element from the front of the ring buffer.
    short[]
    remove(int count)
    Remove multiple elements from the front of the ring buffer
    short
    Remove an element without empty buffer detection.
    int
     

    Methods inherited from class java.lang.Object

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

    • ShortRingBuffer

      public ShortRingBuffer(int capacity)
      Create an unbounded-growth ring buffer of short primitives.
      Parameters:
      capacity - minimum capacity of the ring buffer
    • ShortRingBuffer

      public ShortRingBuffer(int capacity, boolean growable)
      Create a ring buffer of short primitives.
      Parameters:
      capacity - minimum capacity of ring buffer
      growable - whether to allow growth when the buffer is full.
  • Method Details

    • grow

      protected void grow(int increase)
      Increase the capacity of the ring buffer.
      Parameters:
      increase - Increase amount. The ring buffer's capacity will be increased by at least this amount.
    • copyRingBufferToArray

      protected void copyRingBufferToArray(short[] dest)
      Copy the contents of the buffer to a destination buffer. If the destination buffer capacity is smaller than size(), the copy will not fail but will terminate after the buffer is full.
      Parameters:
      dest - The destination buffer.
    • isFull

      public boolean isFull()
    • isEmpty

      public boolean isEmpty()
    • size

      public int size()
    • capacity

      public int capacity()
    • remaining

      public int remaining()
    • clear

      public void clear()
    • add

      public boolean add(short e)
      Adds an entry to the ring buffer, will throw an exception if buffer is full. For a graceful failure, use offer(short)
      Parameters:
      e - the short to be added to the buffer
      Returns:
      true if the short was added successfully
      Throws:
      UnsupportedOperationException - when growable is false and buffer is full
    • ensureRemaining

      public void ensureRemaining(int count)
      Ensure that there is sufficient empty space to store count items in the buffer. If the buffer is growable, this may result in an internal growth operation. This call should be used in conjunction with addUnsafe(short).
      Parameters:
      count - the minimum number of empty entries in the buffer after this call
      Throws:
      UnsupportedOperationException - when growable is false and buffer is full
    • addUnsafe

      public void addUnsafe(short e)
      Add values without overflow detection. The caller *must* ensure that there is at least one element of free space in the ring buffer before calling this method. The caller may use ensureRemaining(int) or remaining() for this purpose.
      Parameters:
      e - the value to add to the buffer
    • addOverwrite

      public short addOverwrite(short e, short notFullResult)
      Add an entry to the ring buffer. If the buffer is full, will overwrite the oldest entry with the new one.
      Parameters:
      e - the short to be added to the buffer
      notFullResult - value to return is the buffer is not full
      Returns:
      the overwritten entry if the buffer is full, the provided value otherwise
    • offer

      public boolean offer(short e)
      Attempt to add an entry to the ring buffer. If the buffer is full, the add will fail and the buffer will not grow even if growable.
      Parameters:
      e - the short to be added to the buffer
      Returns:
      true if the value was added successfully, false otherwise
    • remove

      public short[] remove(int count)
      Remove multiple elements from the front of the ring buffer
      Parameters:
      count - The number of elements to remove.
      Throws:
      NoSuchElementException - if the buffer is empty
    • remove

      public short remove()
      Remove one element from the front of the ring buffer.
      Throws:
      NoSuchElementException - if the buffer is empty
    • removeUnsafe

      public short removeUnsafe()
      Remove an element without empty buffer detection. The caller *must* ensure that there is at least one element in the ring buffer. The size() method may be used for this purpose.
      Returns:
      the value removed from the buffer
    • poll

      public short poll(short onEmpty)
      If the ring buffer is non-empty, removes the element at the head of the ring buffer. Otherwise does nothing.
      Parameters:
      onEmpty - the value to return if the ring buffer is empty
      Returns:
      The removed element if the ring buffer was non-empty, otherwise the value of 'onEmpty'
    • element

      public short element()
      If the ring buffer is non-empty, returns the element at the head of the ring buffer.
      Returns:
      The head element if the ring buffer is non-empty, otherwise the value of 'onEmpty'
      Throws:
      NoSuchElementException - if the buffer is empty
    • peek

      public short peek(short onEmpty)
      If the ring buffer is non-empty, returns the element at the head of the ring buffer. Otherwise returns the specified element.
      Parameters:
      onEmpty - the value to return if the ring buffer is empty
      Returns:
      The head element if the ring buffer is non-empty, otherwise the value of 'onEmpty'
    • front

      public short front()
      Returns the element at the head of the ring buffer
      Returns:
      The element at the head of the ring buffer
    • front

      public short front(int offset)
      Returns the element at the specified offset in the ring buffer.
      Parameters:
      offset - The specified offset.
      Returns:
      The element at the specified offset
      Throws:
      NoSuchElementException - if the buffer is empty
    • back

      public short back()
      Returns the element at the tail of the ring buffer
      Returns:
      The element at the tail of the ring buffer
      Throws:
      NoSuchElementException - if the buffer is empty
    • peekBack

      public short peekBack(short onEmpty)
      If the ring buffer is non-empty, returns the element at the tail of the ring buffer. Otherwise returns the specified element.
      Parameters:
      onEmpty - the value to return if the ring buffer is empty
      Returns:
      The tail element if the ring buffer is non-empty, otherwise the value of 'onEmpty'
    • getAll

      public short[] getAll()
      Make a copy of the elements in the ring buffer.
      Returns:
      An array containing a copy of the elements in the ring buffer.
    • iterator

      public ShortRingBuffer.Iterator iterator()
      Create an iterator for the ring buffer