package ecologylab.collections;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
/**
* A synchronized version of {@link java.util.LinkedList LinkedList},
* because they didn't seem to provided a nice one.
*/
public class SyncLinkedList
implements List
{
LinkedList list;
public SyncLinkedList()
{
this(new LinkedList());
}
public SyncLinkedList(LinkedList list)
{
this.list = list;
}
@Override
public boolean equals(Object o) {
synchronized(list) {return list.equals(o);}
}
@Override
public int hashCode() {
synchronized(list) {return list.hashCode();}
}
@Override
public Object get(int index) {
synchronized(list) {return list.get(index);}
}
@Override
public Object set(int index, Object element) {
synchronized(list) {return list.set(index, element);}
}
@Override
public void add(int index, Object element) {
synchronized(list) {list.add(index, element);}
}
public void addFirst(Object o)
{
synchronized(list) {list.addFirst(o);}
}
public void addLast(Object o)
{
synchronized(list) {list.addLast(o);}
}
@Override
public Object remove(int index) {
synchronized(list) {return list.remove(index);}
}
public Object removeFirst()
{
synchronized(list) {return list.removeFirst();}
}
public Object removeLast()
{
synchronized(list) {return list.removeLast();}
}
public Object getLast()
{
synchronized(list) {return list.getLast();}
}
@Override
public int indexOf(Object o) {
synchronized(list) {return list.indexOf(o);}
}
@Override
public int lastIndexOf(Object o) {
synchronized(list) {return list.lastIndexOf(o);}
}
@Override
public boolean addAll(int index, Collection c) {
synchronized(list) {return list.addAll(index, c);}
}
@Override
public ListIterator listIterator() {
return list.listIterator(); // Must be manually synched by user
}
@Override
public ListIterator listIterator(int index) {
return list.listIterator(index); // Must be manually synched by usr
}
@Override
public List subList(int fromIndex, int toIndex) {
synchronized(list) {
return list.subList(fromIndex, toIndex);
}
}
@Override
public int size() {
synchronized(list) {return list.size();}
}
@Override
public boolean isEmpty() {
synchronized(list) {return list.isEmpty();}
}
@Override
public boolean contains(Object o) {
synchronized(list) {return list.contains(o);}
}
@Override
public Object[] toArray() {
synchronized(list) {return list.toArray();}
}
@Override
public Object[] toArray(Object[] a) {
synchronized(list) {return list.toArray(a);}
}
@Override
public Iterator iterator() {
return list.iterator(); // Must be manually synched by user!
}
@Override
public boolean add(Object o) {
synchronized(list) {return list.add(o);}
}
@Override
public boolean remove(Object o) {
synchronized(list) {return list.remove(o);}
}
@Override
public boolean containsAll(Collection coll) {
synchronized(list) {return list.containsAll(coll);}
}
@Override
public boolean addAll(Collection coll) {
synchronized(list) {return list.addAll(coll);}
}
@Override
public boolean removeAll(Collection coll) {
synchronized(list) {return list.removeAll(coll);}
}
@Override
public boolean retainAll(Collection coll) {
synchronized(list) {return list.retainAll(coll);}
}
@Override
public void clear() {
synchronized(list) {list.clear();}
}
@Override
public String toString() {
synchronized(list) {return list.toString();}
}
}