E - the type of the data stored in the ringbufferpublic class ArrayRingbuffer<E> extends Object implements Ringbuffer<E>
Currently the Ringbuffer is not a partitioned data-structure. So all data of a ringbuffer is stored in a single partition and replicated to the replica's. No thread-safety is needed since a partition can only be accessed by a single thread at any given moment.
The ringItems is the ring that contains the actual items.
| Constructor and Description |
|---|
ArrayRingbuffer(int capacity) |
| Modifier and Type | Method and Description |
|---|---|
long |
add(E item)
Adds an item to the tail of the ringbuffer.
|
void |
checkBlockableReadSequence(long readSequence)
Check if the sequence can be read from the ringbuffer 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 ringbuffer.
|
void |
clear()
Clears the data in the ringbuffer.
|
long |
getCapacity()
Returns the capacity of this ringbuffer.
|
long |
headSequence()
Returns the sequence of the head.
|
boolean |
isEmpty()
Checks if the ringbuffer is empty.
|
long |
merge(MergingEntry<Long,E> mergingEntry,
SplitBrainMergePolicy mergePolicy,
long remainingCapacity)
Merges the given
MergingEntry with the given SplitBrainMergePolicy. |
long |
peekNextTailSequence()
Returns the next sequence which the tail will be at after the next
item is added.
|
E |
read(long sequence)
Reads one item from the ringbuffer.
|
void |
set(long seq,
E data)
Sets the item at the given sequence.
|
void |
setHeadSequence(long sequence)
Sets the head sequence.
|
void |
setSerializationService(SerializationService serializationService)
Sets the
SerializationService for this ringbuffer. |
void |
setTailSequence(long sequence)
Sets the tail sequence.
|
long |
size()
Returns number of items in the ringbuffer (meaning the number of items between the
Ringbuffer.headSequence() and
Ringbuffer.tailSequence()). |
long |
tailSequence()
Returns the sequence of the tail.
|
public long tailSequence()
RingbufferThe initial value of the tail is -1.
tailSequence in interface Ringbuffer<E>public long peekNextTailSequence()
RingbufferpeekNextTailSequence in interface Ringbuffer<E>public void setTailSequence(long sequence)
RingbufferRingbuffer.headSequence() - 1.setTailSequence in interface Ringbuffer<E>sequence - the new tail sequencepublic long headSequence()
Ringbuffer
If the RingBuffer is empty, the head will be one more than the Ringbuffer.tailSequence().
The initial value of the head is 0 (1 more than tail).
headSequence in interface Ringbuffer<E>public void setHeadSequence(long sequence)
RingbufferRingbuffer.tailSequence() + 1setHeadSequence in interface Ringbuffer<E>sequence - the new head sequencepublic long getCapacity()
RingbuffergetCapacity in interface Ringbuffer<E>public long size()
RingbufferRingbuffer.headSequence() and
Ringbuffer.tailSequence()).size in interface Ringbuffer<E>public boolean isEmpty()
RingbufferisEmpty in interface Ringbuffer<E>true if the ringbuffer is empty, false otherwisepublic long add(E item)
RingbufferThe returned value is the sequence of the added item. Using this sequence you can read the added item.
add in interface Ringbuffer<E>item - the item to addpublic E read(long sequence)
RingbufferThis 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.
read in interface Ringbuffer<E>sequence - the sequence of the item to readpublic void checkBlockableReadSequence(long readSequence)
RingbufferRingbuffer.tailSequence(), giving the
opportunity to block until the item is added into the ringbuffer.checkBlockableReadSequence in interface Ringbuffer<E>readSequence - the sequence wanting to be readpublic void checkReadSequence(long sequence)
RingbuffercheckReadSequence in interface Ringbuffer<E>sequence - the sequence wanting to be readpublic void set(long seq,
E data)
Ringbuffernull data.set in interface Ringbuffer<E>seq - the target sequencedata - the data to be setpublic void clear()
Ringbufferclear in interface Ringbuffer<E>public void setSerializationService(SerializationService serializationService)
RingbufferSerializationService for this ringbuffer.setSerializationService in interface Ringbuffer<E>serializationService - the SerializationService for this ringbufferpublic long merge(MergingEntry<Long,E> mergingEntry, SplitBrainMergePolicy mergePolicy, long remainingCapacity)
RingbufferMergingEntry with the given SplitBrainMergePolicy.merge in interface Ringbuffer<E>mergingEntry - the MergingEntry instance to mergemergePolicy - the SplitBrainMergePolicy instance to useremainingCapacity - the remaining ringbuffer capacity, which is checked if a new item has to be added-1 if no item was mergedCopyright © 2018 Hazelcast, Inc.. All Rights Reserved.