Top Fields Constructors Methods
rx.internal.util.atomic

pack-priv abstract Class BaseLinkedAtomicQueue<E>

extends AbstractQueue<E>
Class Inheritance
Known Direct Subclasses
rx.internal.util.atomic.MpscLinkedAtomicQueue, rx.internal.util.atomic.SpscLinkedAtomicQueue
Imports
java.util.AbstractQueue, .Iterator, java.util.concurrent.atomic.AtomicReference

Field Summary

Modifier and TypeField and Description
private final AtomicReference<LinkedQueueNode<E>>
private final AtomicReference<LinkedQueueNode<E>>

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public final boolean
isEmpty()

Overrides java.util.AbstractCollection.isEmpty.

Implements java.util.Collection.isEmpty.

Returns true if this collection contains no elements.
public final Iterator<E>
iterator()

Implements abstract java.util.AbstractCollection.iterator.

Implements java.util.Collection.iterator.

Returns an iterator over the elements in this collection.
protected final LinkedQueueNode<E>
protected final LinkedQueueNode<E>
protected final LinkedQueueNode<E>
protected final LinkedQueueNode<E>
public final int
size()

Implements abstract java.util.AbstractCollection.size.

Implements java.util.Collection.size.

Returns the number of elements in this collection.
protected final void
protected final void
protected final LinkedQueueNode<E>
Inherited from java.util.AbstractQueue:
addaddAllclearelementremove

Field Detail

consumerNodeback to summary
private final AtomicReference<LinkedQueueNode<E>> consumerNode
producerNodeback to summary
private final AtomicReference<LinkedQueueNode<E>> producerNode

Constructor Detail

BaseLinkedAtomicQueueback to summary
public BaseLinkedAtomicQueue()

Method Detail

isEmptyback to summary
public final boolean isEmpty()

Overrides java.util.AbstractCollection.isEmpty.

Implements java.util.Collection.isEmpty.

Doc from java.util.Collection.isEmpty.

Returns true if this collection contains no elements.

Implementation Notes


Queue is empty when producerNode is the same as consumerNode. An alternative implementation would be to observe the producerNode.value is null, which also means an empty queue because only the consumerNode.value is allowed to be null.

Returns:boolean

true if this collection contains no elements

Annotations
@Override
iteratorback to summary
public final Iterator<E> iterator()

Implements abstract java.util.AbstractCollection.iterator.

Implements java.util.Collection.iterator.

Doc from java.util.Collection.iterator.

Returns an iterator over the elements in this collection. There are no guarantees concerning the order in which the elements are returned (unless this collection is an instance of some class that provides a guarantee).

Returns:Iterator<E>

an Iterator over the elements in this collection

Annotations
@Override
lpConsumerNodeback to summary
protected final LinkedQueueNode<E> lpConsumerNode()
lpProducerNodeback to summary
protected final LinkedQueueNode<E> lpProducerNode()
lvConsumerNodeback to summary
protected final LinkedQueueNode<E> lvConsumerNode()
lvProducerNodeback to summary
protected final LinkedQueueNode<E> lvProducerNode()
sizeback to summary
public final int size()

Implements abstract java.util.AbstractCollection.size.

Implements java.util.Collection.size.

Doc from java.util.Collection.size.

Returns the number of elements in this collection. If this collection contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.

Implementation Notes


This is an O(n) operation as we run through all the nodes and count them.

Returns:int

the number of elements in this collection

Annotations
@Override
See Also
java.util.Queue#size()
spConsumerNodeback to summary
protected final void spConsumerNode(LinkedQueueNode<E> node)
spProducerNodeback to summary
protected final void spProducerNode(LinkedQueueNode<E> node)
xchgProducerNodeback to summary
protected final LinkedQueueNode<E> xchgProducerNode(LinkedQueueNode<E> node)