00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 package org.antlr.runtime.misc;
00029
00030 import java.util.List;
00031 import java.util.ArrayList;
00032 import java.util.NoSuchElementException;
00033
00044 public class FastQueue<T> {
00046 protected List<T> data = new ArrayList<T>();
00048 protected int p = 0;
00049 protected int range = -1;
00050
00051 public void reset() { clear(); }
00052 public void clear() { p = 0; data.clear(); }
00053
00055 public T remove() {
00056 T o = elementAt(0);
00057 p++;
00058
00059 if ( p == data.size() ) {
00060
00061 clear();
00062 }
00063 return o;
00064 }
00065
00066 public void add(T o) { data.add(o); }
00067
00068 public int size() { return data.size() - p; }
00069
00070 public int range() { return range; }
00071
00072 public T head() { return elementAt(0); }
00073
00078 public T elementAt(int i) {
00079 int absIndex = p + i;
00080 if ( absIndex >= data.size() ) {
00081 throw new NoSuchElementException("queue index "+ absIndex +" > last index "+(data.size()-1));
00082 }
00083 if ( absIndex < 0 ) {
00084 throw new NoSuchElementException("queue index "+ absIndex +" < 0");
00085 }
00086 if ( absIndex>range ) range = absIndex;
00087 return data.get(absIndex);
00088 }
00089
00091 public String toString() {
00092 StringBuffer buf = new StringBuffer();
00093 int n = size();
00094 for (int i=0; i<n; i++) {
00095 buf.append(elementAt(i));
00096 if ( (i+1)<n ) buf.append(" ");
00097 }
00098 return buf.toString();
00099 }
00100 }