Class BaseMpscLinkedArrayQueue<E>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueuePad1<E>
-
- com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueueProducerFields<E>
-
- com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueuePad2<E>
-
- com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueueConsumerFields<E>
-
- com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueuePad3<E>
-
- com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueueColdProducerFields<E>
-
- com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueue<E>
-
- All Implemented Interfaces:
java.lang.Iterable<E>
,java.util.Collection<E>
,java.util.Queue<E>
- Direct Known Subclasses:
MpscChunkedArrayQueueColdProducerFields
abstract class BaseMpscLinkedArrayQueue<E> extends BaseMpscLinkedArrayQueueColdProducerFields<E>
-
-
Field Summary
Fields Modifier and Type Field Description private static long
C_INDEX_OFFSET
private static java.lang.Object
JUMP
private static long
P_INDEX_OFFSET
private static long
P_LIMIT_OFFSET
-
Fields inherited from class com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueueColdProducerFields
producerBuffer, producerLimit, producerMask
-
Fields inherited from class com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueuePad3
p0, p1, p10, p11, p12, p13, p14, p15, p16, p17, p2, p3, p4, p5, p6, p7
-
Fields inherited from class com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueueConsumerFields
consumerBuffer, consumerIndex, consumerMask
-
Fields inherited from class com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueuePad2
p01, p02, p03, p04, p05, p06, p07
-
Fields inherited from class com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueueProducerFields
producerIndex
-
-
Constructor Summary
Constructors Constructor Description BaseMpscLinkedArrayQueue(int initialCapacity)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static <E> E[]
allocate(int capacity)
protected abstract long
availableInQueue(long pIndex, long cIndex)
abstract int
capacity()
private boolean
casProducerIndex(long expect, long newValue)
private boolean
casProducerLimit(long expect, long newValue)
long
currentConsumerIndex()
long
currentProducerIndex()
protected abstract long
getCurrentBufferCapacity(long mask)
private E[]
getNextBuffer(E[] buffer, long mask)
protected abstract int
getNextBufferSize(E[] buffer)
boolean
isEmpty()
java.util.Iterator<E>
iterator()
private long
lvConsumerIndex()
private long
lvProducerIndex()
private long
lvProducerLimit()
private static long
modifiedCalcElementOffset(long index, long mask)
This method assumes index is actually (index << 1) because lower bit is used for resize.private long
newBufferAndOffset(E[] nextBuffer, long index)
private E
newBufferPeek(E[] nextBuffer, long index)
private E
newBufferPoll(E[] nextBuffer, long index)
private long
nextArrayOffset(long mask)
boolean
offer(E e)
private int
offerSlowPath(long mask, long pIndex, long producerLimit)
We do not inline resize into this method because we do not resize on fill.E
peek()
E
poll()
boolean
relaxedOffer(E e)
E
relaxedPeek()
E
relaxedPoll()
private void
resize(long oldMask, E[] oldBuffer, long pIndex, E e)
int
size()
private void
soConsumerIndex(long v)
private void
soProducerIndex(long v)
private void
soProducerLimit(long v)
java.lang.String
toString()
-
Methods inherited from class java.util.AbstractCollection
contains, containsAll, remove, removeAll, retainAll, toArray, toArray
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
-
-
-
Method Detail
-
iterator
public final java.util.Iterator<E> iterator()
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.util.AbstractCollection<E>
-
offer
public boolean offer(E e)
-
offerSlowPath
private int offerSlowPath(long mask, long pIndex, long producerLimit)
We do not inline resize into this method because we do not resize on fill.
-
availableInQueue
protected abstract long availableInQueue(long pIndex, long cIndex)
- Returns:
- available elements in queue * 2
-
modifiedCalcElementOffset
private static long modifiedCalcElementOffset(long index, long mask)
This method assumes index is actually (index << 1) because lower bit is used for resize. This is compensated for by reducing the element shift. The computation is constant folded, so there's no cost.
-
poll
public E poll()
This implementation is correct for single consumer thread use only.
-
peek
public E peek()
This implementation is correct for single consumer thread use only.
-
nextArrayOffset
private long nextArrayOffset(long mask)
-
newBufferAndOffset
private long newBufferAndOffset(E[] nextBuffer, long index)
-
size
public final int size()
-
isEmpty
public final boolean isEmpty()
-
lvProducerIndex
private long lvProducerIndex()
-
lvConsumerIndex
private long lvConsumerIndex()
-
soProducerIndex
private void soProducerIndex(long v)
-
casProducerIndex
private boolean casProducerIndex(long expect, long newValue)
-
soConsumerIndex
private void soConsumerIndex(long v)
-
lvProducerLimit
private long lvProducerLimit()
-
casProducerLimit
private boolean casProducerLimit(long expect, long newValue)
-
soProducerLimit
private void soProducerLimit(long v)
-
currentProducerIndex
public long currentProducerIndex()
-
currentConsumerIndex
public long currentConsumerIndex()
-
capacity
public abstract int capacity()
-
relaxedOffer
public boolean relaxedOffer(E e)
-
relaxedPoll
public E relaxedPoll()
-
relaxedPeek
public E relaxedPeek()
-
allocate
public static <E> E[] allocate(int capacity)
-
getNextBufferSize
protected abstract int getNextBufferSize(E[] buffer)
- Returns:
- next buffer size(inclusive of next array pointer)
-
getCurrentBufferCapacity
protected abstract long getCurrentBufferCapacity(long mask)
- Returns:
- current buffer capacity for elements (excluding next pointer and jump entry) * 2
-
-