package linkedlists.lockbased;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.SortedSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import linkedlists.lockbased.lazyutils.LazyList;
import contention.abstractions.CompositionalSortedSet;
/**
* This is an implementation variant of the lazy linked
* list presented in:
* S. Heller, M. Herlihy, V. Luchangco, M. Moir, W. N.
* Sherer, N. Shavit. A Lazy Concurrent List-Based Set
* Algorithm. OPODIS 2005.
*/
public class LazyLinkedListSortedSet<E extends Comparable<E>> implements CompositionalSortedSet<E> {
/** LazyLinkedList needs consecutive thread ids for the snapshot counter. */
private static int THREADNUM = 65;
private static AtomicInteger MAXID = new AtomicInteger(0);
private static ConcurrentHashMap<Long, Integer> THREADMAP = new ConcurrentHashMap<Long, Integer>();
/** The Lazy linked list */
private LazyList<E> list = new LazyList<E>(THREADNUM);
private int getSmallThreadId() {
Long threadId = Thread.currentThread().getId();
if (!THREADMAP.containsKey((long) threadId)) {
assert(MAXID.get() < THREADNUM);
THREADMAP.put(threadId, (int) MAXID.getAndIncrement());
}
return THREADMAP.get(threadId);
}
@Override
public int size() {
return list.size(getSmallThreadId());
}
@Override
public Comparator<? super E> comparator() {
// TODO Auto-generated method stub
return null;
}
@Override
public E first() {
// TODO Auto-generated method stub
return null;
}
@Override
public SortedSet<E> headSet(E toElement) {
// TODO Auto-generated method stub
return null;
}
@Override
public E last() {
// TODO Auto-generated method stub
return null;
}
@Override
public SortedSet<E> subSet(E fromElement, E toElement) {
// TODO Auto-generated method stub
return null;
}
@Override
public SortedSet<E> tailSet(E fromElement) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean add(E e) {
return list.add(e, getSmallThreadId());
}
@Override
public boolean addAll(Collection<? extends E> c) {
throw new UnsupportedOperationException();
}
/**
* Useful method for resetting thread
* counts after a WarmUp phase.
*/
@Override
public void clear() {
MAXID.set(0);
THREADMAP.clear();
}
@Override
public boolean contains(Object o) {
return list.contains((E) o, getSmallThreadId());
}
@Override
public boolean containsAll(Collection<?> c) {
throw new UnsupportedOperationException();
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public Iterator<E> iterator() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean remove(Object o) {
// TODO Auto-generated method stub
return list.remove((E) o, getSmallThreadId());
}
@Override
public boolean removeAll(Collection<?> c) {
throw new UnsupportedOperationException();
}
@Override
public boolean retainAll(Collection<?> c) {
throw new UnsupportedOperationException();
}
@Override
public Object[] toArray() {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T[] toArray(T[] a) {
// TODO Auto-generated method stub
return null;
}
}