3 /** FIFO class. This helps implement the lookahead we need for JSR-14.
4 * Copyright (C) 2002 C. Scott Ananian <cananian@alumni.princeton.edu>
5 * This program is released under the terms of the GPL; see the file
6 * COPYING for more details. There is NO WARRANTY on this code.
10 java_cup.runtime.Symbol[] backing = new java_cup.runtime.Symbol[10];
13 FIFO(Getter getter) { this.getter = getter; }
14 public boolean isEmpty() { return start==end; }
15 private boolean isFull() {
16 return start==end+1 || (start==0 && end==backing.length-1);
19 return ((end<start)?end+backing.length:end)-start;
21 public void put(java_cup.runtime.Symbol o) {
23 java_cup.runtime.Symbol[] nbacking =
24 new java_cup.runtime.Symbol[backing.length*2];
25 System.arraycopy(backing, start, nbacking, 0, backing.length-start);
26 System.arraycopy(backing, 0, nbacking, backing.length-start, start);
28 end = backing.length-1;
33 if (end == backing.length)
37 public java_cup.runtime.Symbol get() throws java.io.IOException {
41 java_cup.runtime.Symbol o = backing[start++];
42 if (start == backing.length)
47 public java_cup.runtime.Symbol peek(int i) throws java.io.IOException {
51 if (index >= backing.length) index -= backing.length;
52 ASSERT(0<= index && index < backing.length);
53 return backing[index];
55 abstract static class Getter {
56 abstract java_cup.runtime.Symbol next()
57 throws java.io.IOException;
59 private static void ASSERT(boolean b) {
60 if (!b) throw new RuntimeException();