package rttm.common; import rttm.atomic; public class AtomicLinkedList<T> { LinkedObject<T> head = null; LinkedObject<T> tail = null; @atomic public void insert(LinkedObject<T> entry) { entry.next = null; if (tail == null) { head = entry; } else { tail.next = entry; } tail = entry; } /** * @return null if list is empty. */ @atomic public LinkedObject<T> remove() { LinkedObject<T> result = head; if (head != null) { head = head.next; if (head == null) { tail = null; } } return result; } @atomic public int size() { int size = 0; for (LinkedObject<T> o = head; o != null; o = o.next) { size++; } return size; } public static class LinkedObject<T> { T data; LinkedObject<T> next; public LinkedObject(T data) { this.data = data; } public T getData() { return data; } public void setData(T data) { this.data = data; } } }