Top Description Methods
com.jogamp.common.util

public Interface Ringbuffer<T>

Known Direct Implementers
com.jogamp.common.util.SyncedRingbuffer, com.jogamp.common.util.LFRingbuffer
Imports
java.io.PrintStream

Ring buffer interface, a.k.a circular buffer.

Caller can chose whether to block until get / put is able to proceed or not.

Caller can chose whether to pass an empty array and clear references at get, or using a preset array for circular access of same objects.

Synchronization and hence thread safety details belong to the implementation.

Method Summary

Modifier and TypeMethod and Description
public int
capacity()

Returns the net capacity of this ring buffer.

public void
clear()

Resets the read and write position according to an empty ring buffer and set all ring buffer slots to null.

public void
dump(PrintStream stream, String prefix)

Debug functionality - Dumps the contents of the internal array.

public T

Returns:

the oldest put element if available, otherwise null.
get
()

Dequeues the oldest enqueued element if available, otherwise null.

public T

Returns:

the oldest put element
getBlocking
()

Dequeues the oldest enqueued element.

public int
getFreeSlots()

Returns the number of free slots available to put.

public void
growEmptyBuffer(T[]
array of new full elements the empty buffer shall grow about.
newElements
)

Grows an empty ring buffer, increasing it's capacity about the amount.

public void
growFullBuffer(int
the amount of elements the buffer shall grow about
amount
)

Grows a full ring buffer, increasing it's capacity about the amount.

public boolean
isEmpty()

Returns true if this ring buffer is empty, otherwise false.

public boolean
isFull()

Returns true if this ring buffer is full, otherwise false.

public T

Returns:

null if empty, otherwise the element which would be read next.
peek
()

Peeks the next element at the read position w/o modifying pointer, nor blocking.

public T

Returns:

null if empty, otherwise the element which would be read next.
peekBlocking
()

Peeks the next element at the read position w/o modifying pointer, but w/ blocking.

public boolean
put(T e)

Enqueues the given element.

public void
putBlocking(T e)

Enqueues the given element.

public boolean
putSame(boolean
if true, wait until a free slot becomes available via get.
blocking
)

Enqueues the same element at it's write position, if not full.

public void
resetFull(T[]
Mandatory array w/ length capacity() to be copied into the internal array.
copyFrom
)

Resets the read and write position according to a full ring buffer and fill all slots w/ elements of array copyFrom.

public int
size()

Returns the number of elements in this ring buffer.

public String
toString()

Returns a short string representation incl.

public void
waitForFreeSlots(int count)

Blocks until at least count free slots become available.

Method Detail

capacityback to summary
public int capacity()

Returns the net capacity of this ring buffer.

clearback to summary
public void clear()

Resets the read and write position according to an empty ring buffer and set all ring buffer slots to null.

isEmpty() will return true after calling this method.

dumpback to summary
public void dump(PrintStream stream, String prefix)

Debug functionality - Dumps the contents of the internal array.

getback to summary
public T get()

Dequeues the oldest enqueued element if available, otherwise null.

The returned ring buffer slot will be set to null to release the reference and move ownership to the caller.

Method is non blocking and returns immediately;.

Returns:T

the oldest put element if available, otherwise null.

getBlockingback to summary
public T getBlocking() throws InterruptedException

Dequeues the oldest enqueued element.

The returned ring buffer slot will be set to null to release the reference and move ownership to the caller.

Methods blocks until an element becomes available via put.

Returns:T

the oldest put element

getFreeSlotsback to summary
public int getFreeSlots()

Returns the number of free slots available to put.

growEmptyBufferback to summary
public void growEmptyBuffer(T[] newElements) throws IllegalStateException, IllegalArgumentException

Grows an empty ring buffer, increasing it's capacity about the amount.

Growing an empty ring buffer increases it's size about the amount, i.e. renders it not empty. The new elements are inserted at the read position, able to be read out via get() etc.

Parameters
newElements:T[]

array of new full elements the empty buffer shall grow about.

Exceptions
IllegalStateException:
if buffer is not empty
IllegalArgumentException:
if newElements is null
growFullBufferback to summary
public void growFullBuffer(int amount) throws IllegalStateException, IllegalArgumentException

Grows a full ring buffer, increasing it's capacity about the amount.

Growing a full ring buffer leaves the size intact, i.e. renders it not full. New null elements are inserted at the write position, able to be written to via put(Object) etc.

Parameters
amount:int

the amount of elements the buffer shall grow about

Exceptions
IllegalStateException:
if buffer is not full
IllegalArgumentException:
if amount is < 0
isEmptyback to summary
public boolean isEmpty()

Returns true if this ring buffer is empty, otherwise false.

isFullback to summary
public boolean isFull()

Returns true if this ring buffer is full, otherwise false.

peekback to summary
public T peek()

Peeks the next element at the read position w/o modifying pointer, nor blocking.

Returns:T

null if empty, otherwise the element which would be read next.

peekBlockingback to summary
public T peekBlocking() throws InterruptedException

Peeks the next element at the read position w/o modifying pointer, but w/ blocking.

Returns:T

null if empty, otherwise the element which would be read next.

putback to summary
public boolean put(T e)

Enqueues the given element.

Returns true if successful, otherwise false in case buffer is full.

Method is non blocking and returns immediately;.

putBlockingback to summary
public void putBlocking(T e) throws InterruptedException

Enqueues the given element.

Method blocks until a free slot becomes available via get.

putSameback to summary
public boolean putSame(boolean blocking) throws InterruptedException

Enqueues the same element at it's write position, if not full.

Returns true if successful, otherwise false in case buffer is full.

If blocking is true, method blocks until a free slot becomes available via get.

Parameters
blocking:boolean

if true, wait until a free slot becomes available via get.

resetFullback to summary
public void resetFull(T[] copyFrom) throws IllegalArgumentException

Resets the read and write position according to a full ring buffer and fill all slots w/ elements of array copyFrom.

Array's copyFrom elements will be copied into the internal array, hence it's length must be equal to capacity().

Parameters
copyFrom:T[]

Mandatory array w/ length capacity() to be copied into the internal array.

Exceptions
IllegalArgumentException:
  • if copyFrom is null.
  • if copyFrom's length is different from capacity().
sizeback to summary
public int size()

Returns the number of elements in this ring buffer.

toStringback to summary
public String toString()

Returns a short string representation incl. size/capacity and internal r/w index (impl. dependent).

Annotations
@Override
waitForFreeSlotsback to summary
public void waitForFreeSlots(int count) throws InterruptedException

Blocks until at least count free slots become available.