| package org.apache.yoko.util.concurrent; |
| |
| import java.lang.ref.ReferenceQueue; |
| import java.lang.ref.WeakReference; |
| |
| final class WeakNode<T> extends WeakReference<T> implements VNode<T> { |
| final Runnable cleanup; |
| private PNode<T> prev; |
| private NNode<T> next; |
| |
| WeakNode(T value, ReferenceQueue<T> q, Runnable cleanup) { |
| super(value, q); |
| this.cleanup = cleanup; |
| } |
| public PNode<T> prev() {return prev;} |
| public NNode<T> next() {return next;} |
| public void prev(PNode<T> pnode) {prev = pnode;} |
| public void next(NNode<T> nnode) {next = nnode;} |
| |
| public void insertAfter(PNode<T> pnode) { |
| NNode<T> nnode = pnode.next(); |
| this.next = nnode; |
| this.prev = pnode; |
| nnode.prev(this); |
| pnode.next(this); |
| } |
| |
| public void delete() { |
| this.prev.next(this.next); |
| this.next.prev(this.prev); |
| this.prev = null; |
| this.next = null; |
| } |
| } |