001package cnslab.cnsnetwork;
002import cnslab.cnsmath.*;
003import java.util.Map;
004import java.util.TreeSet;
005import java.util.Iterator;
006import java.util.Arrays;
007import java.util.PriorityQueue;
008import java.io.PrintStream;
009/**
010 * Implement the java provided priority queue
011 * 
012 * @author Yi Dong
013 */
014public class PriQueue<T extends Comparable<T> > implements Queue<T>
015{
016        private PriorityQueue<T> treeQueue = new PriorityQueue<T>();
017
018        /**
019         * @see cnslab.cnsnetwork.Queue#deleteItem(java.lang.Comparable) deleteItem
020         */
021        public synchronized void deleteItem(T item) {
022
023                if(item.compareTo( treeQueue.peek())!=0) throw new RuntimeException("delete non fist item (input):"+item+" first item"+treeQueue.peek());
024                treeQueue.poll();
025        }
026
027        /**
028         * @see cnslab.cnsnetwork.Queue#insertItem(java.lang.Comparable) insertItem
029         */
030        public synchronized void insertItem(T item) {
031                treeQueue.add(item);
032        }
033
034
035        /**
036         * @see cnslab.cnsnetwork.Queue#firstItem() firstItem
037         */
038        public synchronized T firstItem() {
039                return treeQueue.peek();
040        }
041
042        /** 
043         * show all the elements in the Queue in order 
044         */
045        public synchronized void show(PrintStream p) {
046                Iterator<T> iter= treeQueue.iterator();
047                while(iter.hasNext())
048                {
049                p.println(iter.next());
050                }
051        }
052
053        public synchronized String show() {
054                String out="";
055                Iterator<T> iter= treeQueue.iterator();
056                out=out+"<";
057                while(iter.hasNext())
058                {
059                        out=out+iter.next();
060                }
061                out=out+">";
062                return out;
063        }
064
065        public synchronized void clear(){
066                treeQueue.clear();
067        }
068}