public interface Ringbuffer<T>
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.
Modifier and Type | Method and Description |
---|---|
int |
capacity()
Returns the net capacity of this ring buffer.
|
void |
clear()
Resets the read and write position according to an empty ring buffer
and set all ring buffer slots to
null . |
void |
dump(PrintStream stream,
String prefix)
Debug functionality - Dumps the contents of the internal array.
|
T |
get()
Dequeues the oldest enqueued element if available, otherwise null.
|
T |
getBlocking()
Dequeues the oldest enqueued element.
|
int |
getFreeSlots()
Returns the number of free slots available to put.
|
void |
growEmptyBuffer(T[] newElements)
Grows an empty ring buffer, increasing it's capacity about the amount.
|
void |
growFullBuffer(int amount)
Grows a full ring buffer, increasing it's capacity about the amount.
|
boolean |
isEmpty()
Returns true if this ring buffer is empty, otherwise false.
|
boolean |
isFull()
Returns true if this ring buffer is full, otherwise false.
|
T |
peek()
Peeks the next element at the read position w/o modifying pointer, nor blocking.
|
T |
peekBlocking()
Peeks the next element at the read position w/o modifying pointer, but w/ blocking.
|
boolean |
put(T e)
Enqueues the given element.
|
void |
putBlocking(T e)
Enqueues the given element.
|
boolean |
putSame(boolean blocking)
Enqueues the same element at it's write position, if not full.
|
void |
resetFull(T[] copyFrom)
Resets the read and write position according to a full ring buffer
and fill all slots w/ elements of array
copyFrom . |
int |
size()
Returns the number of elements in this ring buffer.
|
String |
toString()
Returns a short string representation incl.
|
void |
waitForFreeSlots(int count)
Blocks until at least
count free slots become available. |
String toString()
void dump(PrintStream stream, String prefix)
int capacity()
void clear()
null
.
isEmpty()
will return true
after calling this method.
void resetFull(T[] copyFrom) throws IllegalArgumentException
copyFrom
.
Array's copyFrom
elements will be copied into the internal array,
hence it's length must be equal to capacity()
.
copyFrom
- Mandatory array w/ length capacity()
to be copied into the internal array.IllegalArgumentException
- if copyFrom
is null
.IllegalArgumentException
- if copyFrom
's length is different from capacity()
.int size()
int getFreeSlots()
boolean isEmpty()
boolean isFull()
T get()
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;.
T getBlocking() throws InterruptedException
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.
InterruptedException
T peek()
null
if empty, otherwise the element which would be read next.T peekBlocking() throws InterruptedException
null
if empty, otherwise the element which would be read next.InterruptedException
boolean put(T e)
Returns true if successful, otherwise false in case buffer is full.
Method is non blocking and returns immediately;.
void putBlocking(T e) throws InterruptedException
Method blocks until a free slot becomes available via get.
InterruptedException
boolean putSame(boolean blocking) throws InterruptedException
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.
blocking
- if true, wait until a free slot becomes available via get.InterruptedException
void waitForFreeSlots(int count) throws InterruptedException
count
free slots become available.InterruptedException
void growEmptyBuffer(T[] newElements) throws IllegalStateException, IllegalArgumentException
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.
newElements
- array of new full elements the empty buffer shall grow about.IllegalStateException
- if buffer is not emptyIllegalArgumentException
- if newElements is nullvoid growFullBuffer(int amount) throws IllegalStateException, IllegalArgumentException
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.
amount
- the amount of elements the buffer shall grow aboutIllegalStateException
- if buffer is not fullIllegalArgumentException
- if amount is < 0