static final class ConcurrentLinkedDeque.Node<E> extends java.util.concurrent.atomic.AtomicReference<ConcurrentLinkedDeque.Node<E>>
Modifier and Type | Field and Description |
---|---|
(package private) E |
element |
private ConcurrentLinkedDeque.Node<E> |
prev |
private static long |
serialVersionUID |
Constructor and Description |
---|
Node(ConcurrentLinkedDeque.Node<E> next)
Creates a marker node with given successor.
|
Node(E element,
ConcurrentLinkedDeque.Node<E> next,
ConcurrentLinkedDeque.Node<E> prev)
Creates a node with given contents.
|
Modifier and Type | Method and Description |
---|---|
(package private) ConcurrentLinkedDeque.Node<E> |
append(E element)
Tries to insert a node holding element as successor, failing
if this node is deleted.
|
(package private) ConcurrentLinkedDeque.Node<E> |
back()
Returns previous node containing a nondeleted user element, if
possible.
|
private boolean |
casNext(ConcurrentLinkedDeque.Node<E> cmp,
ConcurrentLinkedDeque.Node<E> val)
compareAndSet next link
|
(package private) boolean |
delete()
Tries to mark this node as deleted, failing if already
deleted or if this node is header or trailer.
|
private ConcurrentLinkedDeque.Node<E> |
findPredecessorOf(ConcurrentLinkedDeque.Node<E> target)
Returns the apparent predecessor of target by searching
forward for it, starting at this node, patching up pointers
while traversing.
|
(package private) ConcurrentLinkedDeque.Node<E> |
forward()
Returns the next node containing a nondeleted user element.
|
private ConcurrentLinkedDeque.Node<E> |
getNext()
Gets next link (which is actually the value held
as atomic reference).
|
private ConcurrentLinkedDeque.Node<E> |
getPrev()
Gets prev link.
|
(package private) boolean |
isDeleted()
Returns true if this node is followed by a marker node,
meaning that this node is deleted.
|
(package private) boolean |
isHeader()
Returns true if this is a header node.
|
(package private) boolean |
isMarker()
Returns true if this is a marker node.
|
(package private) boolean |
isSpecial()
Returns true if this is a header, trailer, or marker node.
|
(package private) boolean |
isTrailer()
Returns true if this is a trailer node.
|
private ConcurrentLinkedDeque.Node<E> |
nextNonmarker()
Returns next node, ignoring deletion marker.
|
(package private) ConcurrentLinkedDeque.Node<E> |
predecessor()
Returns the previous non-deleted node, patching up pointers
as needed.
|
(package private) ConcurrentLinkedDeque.Node<E> |
prepend(E element)
Tries to insert a node holding element as predecessor, failing
if no live predecessor can be found to link to.
|
(package private) ConcurrentLinkedDeque.Node<E> |
replace(E newElement)
Tries to insert a node holding element to replace this node.
|
(package private) void |
setNext(ConcurrentLinkedDeque.Node<E> n)
Sets next link.
|
(package private) void |
setPrev(ConcurrentLinkedDeque.Node<E> b)
Sets prev link.
|
(package private) ConcurrentLinkedDeque.Node<E> |
successor()
Returns the next non-deleted node, swinging next pointer
around any encountered deleted nodes, and also patching up
successor's prev link to point back to this.
|
private volatile ConcurrentLinkedDeque.Node<E> prev
final E element
private static final long serialVersionUID
Node(E element, ConcurrentLinkedDeque.Node<E> next, ConcurrentLinkedDeque.Node<E> prev)
Node(ConcurrentLinkedDeque.Node<E> next)
private ConcurrentLinkedDeque.Node<E> getNext()
void setNext(ConcurrentLinkedDeque.Node<E> n)
n
- the next nodeprivate boolean casNext(ConcurrentLinkedDeque.Node<E> cmp, ConcurrentLinkedDeque.Node<E> val)
private ConcurrentLinkedDeque.Node<E> getPrev()
void setPrev(ConcurrentLinkedDeque.Node<E> b)
b
- the previous nodeboolean isSpecial()
boolean isTrailer()
boolean isHeader()
boolean isMarker()
boolean isDeleted()
private ConcurrentLinkedDeque.Node<E> nextNonmarker()
ConcurrentLinkedDeque.Node<E> successor()
private ConcurrentLinkedDeque.Node<E> findPredecessorOf(ConcurrentLinkedDeque.Node<E> target)
ConcurrentLinkedDeque.Node<E> predecessor()
ConcurrentLinkedDeque.Node<E> forward()
ConcurrentLinkedDeque.Node<E> back()
ConcurrentLinkedDeque.Node<E> append(E element)
element
- the elementConcurrentLinkedDeque.Node<E> prepend(E element)
element
- the elementboolean delete()
ConcurrentLinkedDeque.Node<E> replace(E newElement)
newElement
- the new element