public PriorityLinkedListImpl(final int priorities) { this.priorities = priorities; levels = (LinkedListImpl<T>[])Array.newInstance(LinkedListImpl.class, priorities); for (int i = 0; i < priorities; i++) { levels[i] = new LinkedListImpl<T>(); } }
public void clear() { for (LinkedListImpl<T> list : levels) { list.clear(); } size = 0; }
public LinkedListImpl() { iters = createIteratorArray(INITIAL_ITERATOR_ARRAY_SIZE); }
public T poll() { T t = null; // We are just using a simple prioritization algorithm: // Highest priority refs always get returned first. // This could cause starvation of lower priority refs. // TODO - A better prioritization algorithm for (int i = highestPriority; i >= 0; i--) { LinkedListImpl<T> ll = levels[i]; if (ll.size() != 0) { t = ll.poll(); if (t != null) { size--; if (ll.size() == 0) { if (highestPriority == i) { highestPriority--; } } } break; } } return t; }
public void addHead(final T t, final int priority) { checkHighest(priority); levels[priority].addHead(t); size++; }
private synchronized void addIter(Iterator iter) { if (numIters == iters.length) { resize(2 * numIters); } iters[nextIndex++] = iter; numIters++; }
public void addTail(final T t, final int priority) { checkHighest(priority); levels[priority].addTail(t); size++; }
public E poll() { Node<E> ret = head.next; if (ret != null) { removeAfter(head); return ret.val; } else { return null; } }
private void removeAfter(Node<E> node) { Node<E> toRemove = node.next; node.next = toRemove.next; if (toRemove.next != null) { toRemove.next.prev = node; } if (toRemove == tail) { tail = node; } size--; if (toRemove.iterCount != 0) { LinkedListImpl.this.nudgeIterators(toRemove); } //Help GC - otherwise GC potentially has to traverse a very long list to see if elements are reachable, this can result in OOM //https://jira.jboss.org/browse/HORNETQ-469 toRemove.next = toRemove.prev = null; }
public T poll() { T t = null; // We are just using a simple prioritization algorithm: // Highest priority refs always get returned first. // This could cause starvation of lower priority refs. // TODO - A better prioritization algorithm for (int i = highestPriority; i >= 0; i--) { LinkedListImpl<T> ll = levels[i]; if (ll.size() != 0) { t = ll.poll(); if (t != null) { size--; if (ll.size() == 0) { if (highestPriority == i) { highestPriority--; } } } break; } } return t; }
public void addHead(final T t, final int priority) { checkHighest(priority); levels[priority].addHead(t); size++; }
private synchronized void addIter(Iterator iter) { if (numIters == iters.length) { resize(2 * numIters); } iters[nextIndex++] = iter; numIters++; }
public void addTail(final T t, final int priority) { checkHighest(priority); levels[priority].addTail(t); size++; }
public E poll() { Node<E> ret = head.next; if (ret != null) { removeAfter(head); return ret.val; } else { return null; } }
private void removeAfter(Node<E> node) { Node<E> toRemove = node.next; node.next = toRemove.next; if (toRemove.next != null) { toRemove.next.prev = node; } if (toRemove == tail) { tail = node; } size--; if (toRemove.iterCount != 0) { LinkedListImpl.this.nudgeIterators(toRemove); } //Help GC - otherwise GC potentially has to traverse a very long list to see if elements are reachable, this can result in OOM //https://jira.jboss.org/browse/HORNETQ-469 toRemove.next = toRemove.prev = null; }
public void addTail(E e) { if (size == 0) { addHead(e); } else { Node<E> node = new Node<E>(e); node.prev = tail; tail.next = node; tail = node; size++; } }
private synchronized void removeIter(Iterator iter) { for (int i = 0; i < numIters; i++) { if (iter == iters[i]) { iters[i] = null; if (i != numIters - 1) { // Fill in the hole System.arraycopy(iters, i + 1, iters, i, numIters - i - 1); } numIters--; if (numIters >= INITIAL_ITERATOR_ARRAY_SIZE && numIters == iters.length / 2) { resize(numIters); } nextIndex--; return; } } throw new IllegalStateException("Cannot find iter to remove"); }
public LinkedListImpl() { iters = createIteratorArray(INITIAL_ITERATOR_ARRAY_SIZE); }
public void clear() { for (LinkedListImpl<T> list : levels) { list.clear(); } size = 0; }
public PriorityLinkedListImpl(final int priorities) { levels = (LinkedListImpl<T>[]) Array.newInstance(LinkedListImpl.class, priorities); for (int i = 0; i < priorities; i++) { levels[i] = new LinkedListImpl<T>(); } }