FileDocCategorySizeDatePackage
ExposedNodeLinkedList.javaAPI DocGlassfish v2 API10805Tue May 22 16:54:34 BST 2007oracle.toplink.essentials.internal.helper.linkedlist

ExposedNodeLinkedList

public class ExposedNodeLinkedList extends Object implements List
INTERNAL: A custom implementation of a linked list. This list exposes the linked nodes directly to the developer. It allows nodes to be referenced in code for quick list manipulation (ie reshuffle, remove, or queueing) It is specifically used in the TopLink cache write lock mechanism in order to allow quick removal of objects from the list while still providing the getFirst() addLast() functionality of a queue. The alternative java classes LinkedList, LinkedHashMap do not provide both functional requirements.
author
Gordon Yorke
since
10.0.3
see
oracle.toplink.essentials.internal.helper.linkedlist.LinkedNode

Fields Summary
private transient LinkedNode
header
private transient int
size
Constructors Summary
public ExposedNodeLinkedList()
Constructs an empty list.

        this.size = 0;
        this.header = new LinkedNode(null, null, null);
        header.next = header;
        header.previous = header;
    
Methods Summary
public booleanadd(java.lang.Object object)

        addLast(object);
        return true;
    
public voidadd(int index, java.lang.Object object)

        throw ValidationException.operationNotSupported("add");
    
private oracle.toplink.essentials.internal.helper.linkedlist.LinkedNodeaddAfter(java.lang.Object o, oracle.toplink.essentials.internal.helper.linkedlist.LinkedNode n)

        LinkedNode newNode = new LinkedNode(o, n.next, n);
        newNode.previous.next = newNode;
        newNode.next.previous = newNode;
        size++;
        return newNode;
    
public booleanaddAll(java.util.Collection collection)

        throw ValidationException.operationNotSupported("addAll");
    
public booleanaddAll(int index, java.util.Collection collection)

        throw ValidationException.operationNotSupported("addAll");
    
public oracle.toplink.essentials.internal.helper.linkedlist.LinkedNodeaddFirst(java.lang.Object o)
Inserts the given contents at the beginning of this list.

param
o the contents to be inserted at the beginning of this list.

        return addAfter(o, header);
    
public oracle.toplink.essentials.internal.helper.linkedlist.LinkedNodeaddLast(java.lang.Object o)
Appends the given contents to the end of this list. (Identical in function to the add method; included only for consistency.)

param
o the contents to be inserted at the end of this list.

        return addAfter(o, header.previous);
    
public voidclear()
Removes all of the contentss from this list.

        header.next = header;
        header.previous = header;
        size = 0;
    
public booleancontains(java.lang.Object o)
Returns true if this list contains the specified contents. More formally, returns true if and only if this list contains at least one contents e such that (o==null ? e==null : o.equals(e)).

param
o contents whose presence in this list is to be tested.
return
true if this list contains the specified contents.

        return indexOf(o) != -1;
    
public booleancontainsAll(java.util.Collection collection)

        throw ValidationException.operationNotSupported("containsAll");
    
public java.lang.Objectget(int index)

        throw ValidationException.operationNotSupported("get");
    
public java.lang.ObjectgetFirst()
Returns the first contents in this list.

return
the first contents in this list. Null if this list is empty.

        if (size == 0) {
            return null;
        }
        return header.next.contents;
    
public java.lang.ObjectgetLast()
Returns the last contents in this list.

return
the last contents in this list. Null if this list is empty.

        if (size == 0) {
            return null;
        }
        return header.previous.contents;
    
public intindexOf(java.lang.Object o)
Returns the index in this list of the first occurrence of the specified contents, or -1 if the List does not contain this contents. More formally, returns the lowest index i such that (o==null ? get(i)==null : o.equals(get(i))), or -1 if there is no such index.

param
o contents to search for.
return
the index in this list of the first occurrence of the specified contents, or -1 if the list does not contain this contents.

        int index = 0;
        if (o == null) {
            for (LinkedNode n = header.next; n != header; n = n.next) {
                if (n.contents == null) {
                    return index;
                }
                index++;
            }
        } else {
            for (LinkedNode n = header.next; n != header; n = n.next) {
                if (o.equals(n.contents)) {
                    return index;
                }
                index++;
            }
        }
        return -1;
    
public booleanisEmpty()

        return size() == 0;
    
public java.util.Iteratoriterator()

        throw ValidationException.operationNotSupported("iterator");
    
public intlastIndexOf(java.lang.Object object)

        throw ValidationException.operationNotSupported("lastIndexOf");
    
public java.util.ListIteratorlistIterator(int index)

        throw ValidationException.operationNotSupported("listIterator");
    
public java.util.ListIteratorlistIterator()

        throw ValidationException.operationNotSupported("listIterator");
    
public voidmoveFirst(oracle.toplink.essentials.internal.helper.linkedlist.LinkedNode node)
Allows a node to be efficiently moved first.

        if (node == header) {
            throw new NoSuchElementException();
        } else if ((node.previous == null) || (node.next == null)) {
            // Handles case of node having already been removed.
            size++;
        } else {
            node.previous.next = node.next;
            node.next.previous = node.previous;
        }
        node.next = header.next;
        node.previous = header;
        header.next = node;
        node.next.previous = node;
    
public booleanremove(java.lang.Object object)

        throw ValidationException.operationNotSupported("remove");
    
public java.lang.Objectremove(int index)

        throw ValidationException.operationNotSupported("remove");
    
public voidremove(oracle.toplink.essentials.internal.helper.linkedlist.LinkedNode n)
Allows a node to be efficiently removed.

        if (n == header) {
            throw new NoSuchElementException();
        } else if ((n.previous == null) || (n.next == null)) {
            // Handles case of node having already been removed.
            return;
        }
        n.previous.next = n.next;
        n.next.previous = n.previous;
        // Also clear the nodes references to know that it has been removed.
        n.previous = null;
        n.next = null;
        n.contents = null;
        size--;
    
public booleanremoveAll(java.util.Collection collection)

        throw ValidationException.operationNotSupported("removeAll");
    
public java.lang.ObjectremoveFirst()
Removes and returns the first contents from this list.

return
the first contents from this list.
throws
NoSuchElementException if this list is empty.

        if (size != 0) {
            Object first = header.next.contents;
            remove(header.next);
            return first;
        }
        return null;
    
public java.lang.ObjectremoveLast()
Removes and returns the last contents from this list.

return
the last contents from this list.
throws
NoSuchElementException if this list is empty.

        if (size != 0) {
            Object last = header.previous.contents;
            remove(header.previous);
            return last;
        }
        return null;
    
public booleanretainAll(java.util.Collection collection)

        throw ValidationException.operationNotSupported("retainAll");
    
public java.lang.Objectset(int index, java.lang.Object value)

        throw ValidationException.operationNotSupported("set");
    
public intsize()
Returns the number of contentss in this list.

return
the number of contentss in this list.

        return size;
    
public java.util.ListsubList(int start, int end)

        throw ValidationException.operationNotSupported("subList");
    
public java.lang.Object[]toArray(java.lang.Object[] array)

        throw ValidationException.operationNotSupported("toArray");
    
public java.lang.Object[]toArray()

        throw ValidationException.operationNotSupported("toArray");