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 longC_INDEX_OFFSETprivate static java.lang.ObjectJUMPprivate static longP_INDEX_OFFSETprivate static longP_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 longavailableInQueue(long pIndex, long cIndex)abstract intcapacity()private booleancasProducerIndex(long expect, long newValue)private booleancasProducerLimit(long expect, long newValue)longcurrentConsumerIndex()longcurrentProducerIndex()protected abstract longgetCurrentBufferCapacity(long mask)private E[]getNextBuffer(E[] buffer, long mask)protected abstract intgetNextBufferSize(E[] buffer)booleanisEmpty()java.util.Iterator<E>iterator()private longlvConsumerIndex()private longlvProducerIndex()private longlvProducerLimit()private static longmodifiedCalcElementOffset(long index, long mask)This method assumes index is actually (index << 1) because lower bit is used for resize.private longnewBufferAndOffset(E[] nextBuffer, long index)private EnewBufferPeek(E[] nextBuffer, long index)private EnewBufferPoll(E[] nextBuffer, long index)private longnextArrayOffset(long mask)booleanoffer(E e)private intofferSlowPath(long mask, long pIndex, long producerLimit)We do not inline resize into this method because we do not resize on fill.Epeek()Epoll()booleanrelaxedOffer(E e)ErelaxedPeek()ErelaxedPoll()private voidresize(long oldMask, E[] oldBuffer, long pIndex, E e)intsize()private voidsoConsumerIndex(long v)private voidsoProducerIndex(long v)private voidsoProducerLimit(long v)java.lang.StringtoString()-
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:
toStringin 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
-
-