Mercurial > hg > blitz_condensed
diff src/EDU/oswego/cs/dl/util/concurrent/BoundedPriorityQueue.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/EDU/oswego/cs/dl/util/concurrent/BoundedPriorityQueue.java Sat Mar 21 11:00:06 2009 +0000 @@ -0,0 +1,117 @@ +/* + File: BoundedPriorityQueue.java + + Originally written by Doug Lea and released into the public domain. + This may be used for any purposes whatsoever without acknowledgment. + Thanks for the assistance and support of Sun Microsystems Labs, + and everyone contributing, testing, and using this code. + + History: + Date Who What + 16Jun1998 dl Create public version + 25aug1998 dl added peek + 29aug1998 dl pulled heap mechanics into separate class +*/ + +package EDU.oswego.cs.dl.util.concurrent; +import java.util.Comparator; +import java.lang.reflect.*; + +/** + * A heap-based priority queue, using semaphores for + * concurrency control. + * The take operation returns the <em>least</em> element + * with respect to the given ordering. (If more than + * one element is tied for least value, one of them is + * arbitrarily chosen to be returned -- no guarantees + * are made for ordering across ties.) + * Ordering follows the JDK1.2 collection + * conventions: Either the elements must be Comparable, or + * a Comparator must be supplied. Comparison failures throw + * ClassCastExceptions during insertions and extractions. + * The implementation uses a standard array-based heap algorithm, + * as described in just about any data structures textbook. + * <p> + * Put and take operations may throw ClassCastException + * if elements are not Comparable, or + * not comparable using the supplied comparator. + * Since not all elements are compared on each operation + * it is possible that an exception will not be thrown + * during insertion of non-comparable element, but will later be + * encountered during another insertion or extraction. + * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>] + **/ + +public class BoundedPriorityQueue extends SemaphoreControlledChannel { + protected final Heap heap_; + + /** + * Create a priority queue with the given capacity and comparator + * @exception IllegalArgumentException if capacity less or equal to zero + **/ + + public BoundedPriorityQueue(int capacity, Comparator cmp) + throws IllegalArgumentException { + super(capacity); + heap_ = new Heap(capacity, cmp); + } + + /** + * Create a priority queue with the current default capacity + * and the given comparator + **/ + + public BoundedPriorityQueue(Comparator comparator) { + this(DefaultChannelCapacity.get(), comparator); + } + + /** + * Create a priority queue with the given capacity, + * and relying on natural ordering. + **/ + + public BoundedPriorityQueue(int capacity) { + this(capacity, null); + } + + /** + * Create a priority queue with the current default capacity + * and relying on natural ordering. + **/ + + public BoundedPriorityQueue() { + this(DefaultChannelCapacity.get(), null); + } + + + /** + * Create a priority queue with the given capacity and comparator, using + * the supplied Semaphore class for semaphores. + * @exception IllegalArgumentException if capacity less or equal to zero + * @exception NoSuchMethodException If class does not have constructor + * that intializes permits + * @exception SecurityException if constructor information + * not accessible + * @exception InstantiationException if semaphore class is abstract + * @exception IllegalAccessException if constructor cannot be called + * @exception InvocationTargetException if semaphore constructor throws an + * exception + **/ + + public BoundedPriorityQueue(int capacity, Comparator cmp, + Class semaphoreClass) + throws IllegalArgumentException, + NoSuchMethodException, + SecurityException, + InstantiationException, + IllegalAccessException, + InvocationTargetException { + super(capacity, semaphoreClass); + heap_ = new Heap(capacity, cmp); + } + + protected void insert(Object x) { heap_.insert(x); } + protected Object extract() { return heap_.extract(); } + public Object peek() { return heap_.peek(); } + +}