diff --git a/activemq-core/src/main/java/org/apache/activemq/kaha/impl/IndexLinkedList.java b/activemq-core/src/main/java/org/apache/activemq/kaha/impl/IndexLinkedList.java new file mode 100644 index 0000000000..c8f6915b3c --- /dev/null +++ b/activemq-core/src/main/java/org/apache/activemq/kaha/impl/IndexLinkedList.java @@ -0,0 +1,154 @@ +package org.apache.activemq.kaha.impl; + +interface IndexLinkedList{ + + /** + * @return the root used by the List + */ + public IndexItem getRoot(); + + /** + * Returns the first element in this list. + * + * @return the first element in this list. + */ + public IndexItem getFirst(); + + /** + * Returns the last element in this list. + * + * @return the last element in this list. + */ + public IndexItem getLast(); + + /** + * Removes and returns the first element from this list. + * + * @return the first element from this list. + */ + public IndexItem removeFirst(); + + /** + * Removes and returns the last element from this list. + * + * @return the last element from this list. + */ + public Object removeLast(); + + /** + * Inserts the given element at the beginning of this list. + * + * @param o the element to be inserted at the beginning of this list. + */ + public void addFirst(IndexItem item); + + /** + * Appends the given element to the end of this list. (Identical in function to the add method; included + * only for consistency.) + * + * @param o the element to be inserted at the end of this list. + */ + public void addLast(IndexItem item); + + /** + * Returns the number of elements in this list. + * + * @return the number of elements in this list. + */ + public int size(); + + /** + * is the list empty? + * + * @return true if there are no elements in the list + */ + public boolean isEmpty(); + + /** + * Appends the specified element to the end of this list. + * + * @param o element to be appended to this list. + * @return true (as per the general contract of Collection.add). + */ + public boolean add(IndexItem item); + + /** + * Removes all of the elements from this list. + */ + public void clear(); + + // Positional Access Operations + /** + * Returns the element at the specified position in this list. + * + * @param index index of element to return. + * @return the element at the specified position in this list. + * + * @throws IndexOutOfBoundsException if the specified index is is out of range (index < 0 || index >= size()). + */ + public IndexItem get(int index); + + /** + * Inserts the specified element at the specified position in this list. Shifts the element currently at that + * position (if any) and any subsequent elements to the right (adds one to their indices). + * + * @param index index at which the specified element is to be inserted. + * @param element element to be inserted. + * + * @throws IndexOutOfBoundsException if the specified index is out of range (index < 0 || index > size()). + */ + public void add(int index,IndexItem element); + + /** + * Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts + * one from their indices). Returns the element that was removed from the list. + * + * @param index the index of the element to removed. + * @return the element previously at the specified position. + * + * @throws IndexOutOfBoundsException if the specified index is out of range (index < 0 || index >= size()). + */ + public Object remove(int index); + + // Search Operations + /** + * Returns the index in this list of the first occurrence of the specified element, or -1 if the List does not + * contain this element. 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 element to search for. + * @return the index in this list of the first occurrence of the specified element, or -1 if the list does not + * contain this element. + */ + public int indexOf(IndexItem o); + + /** + * Retrieve the next entry after this entry + * + * @param entry + * @return next entry + */ + public IndexItem getNextEntry(IndexItem entry); + + /** + * Retrive the prev entry after this entry + * + * @param entry + * @return prev entry + */ + public IndexItem getPrevEntry(IndexItem entry); + + + /** + * remove an entry + * @param e + */ + public void remove(IndexItem e); + + /** + * Ensure we have the up to date entry + * @param current + * @return the entry + */ + public IndexItem getEntry(IndexItem current); +} \ No newline at end of file