T
- the type of the data stored in the ring bufferpublic interface Ringbuffer<T>
Modifier and Type | Method and Description |
---|---|
long |
add(T item)
Adds an item to the tail of the Ringbuffer.
|
void |
checkBlockableReadSequence(long readSequence)
Check if the sequence can be read from the ring buffer or if the sequence is of the next item to be added into the
ringbuffer.
|
void |
checkReadSequence(long sequence)
Check if the sequence can be read from the ring buffer.
|
long |
getCapacity()
Returns the capacity of this Ringbuffer.
|
long |
headSequence()
Returns the sequence of the head.
|
boolean |
isEmpty()
Is the ring buffer empty.
|
T |
read(long sequence)
Reads one item from the Ringbuffer.
|
void |
set(long seq,
T data)
Sets the item at the given sequence.
|
void |
setHeadSequence(long sequence)
Sets the head sequence.
|
void |
setTailSequence(long tailSequence)
Sets the tail sequence.
|
long |
size()
Returns number of items in the ringbuffer (meaning the number of items between the
headSequence() and
tailSequence() ). |
long |
tailSequence()
Returns the sequence of the tail.
|
long getCapacity()
long size()
headSequence()
and
tailSequence()
).long tailSequence()
The initial value of the tail is -1.
void setTailSequence(long tailSequence)
headSequence()
- 1.tailSequence
- the new tail sequenceIllegalArgumentException
- if the target sequence is less than headSequence()
- 1long headSequence()
If the RingBuffer is empty, the head will be one more than the tailSequence()
.
The initial value of the head is 0 (1 more than tail).
void setHeadSequence(long sequence)
tailSequence()
+ 1sequence
- The new head sequence.IllegalArgumentException
- if the target sequence is greater than tailSequence()
+ 1boolean isEmpty()
long add(T item)
The returned value is the sequence of the added item. Using this sequence you can read the added item.
item
- the item to add.T read(long sequence)
This method is not destructive unlike e.g. a queue.take. So the same item can be read by multiple readers or it can be read multiple times by the same reader.
sequence
- the sequence of the item to read.StaleSequenceException
- if the sequence is smaller then headSequence()
or larger than tailSequence()
. Because a Ringbuffer won't store all event
indefinitely, it can be that the data for the given sequence doesn't exist anymore
and the StaleSequenceException
is thrown. It is up to the caller to deal with
this particular situation, e.g. throw an Exception or restart from the last known head.
That is why the StaleSequenceException contains the last known head.void checkBlockableReadSequence(long readSequence)
tailSequence()
, giving the
oportunity to block until the item is added into the ring buffer.readSequence
- the sequence wanting to be readStaleSequenceException
- if the requested sequence is smaller than the headSequence()
IllegalArgumentException
- if the requested sequence is greater than the tailSequence()
+ 1void checkReadSequence(long sequence)
sequence
- the sequence wanting to be readStaleSequenceException
- if the requested sequence is smaller than the headSequence()
IllegalArgumentException
- if the requested sequence is greater than the tailSequence()
void set(long seq, T data)
seq
- The target sequence.data
- The data to be setCopyright © 2017 Hazelcast, Inc.. All Rights Reserved.