/* queue.c: simple fixed-size queue (FIFO) in LPC 3.0 -- by Truilkan@TMI - 92/01/31 */ private mixed *queue; private int hptr, tptr, size, primed; private int count; mixed dequeue() { int h; if (!count) return -1; count--; h = hptr; hptr = (hptr + 1) % size; return queue[h]; /* pre-increment */ } int enqueue(mixed elt) { if (count++ == size) return -1; queue[tptr] = elt; /* post-increment */ tptr = (tptr + 1) % size; return 0; } void alloc(int s) { count = 0; hptr = 0; tptr = 0; size = s; queue = allocate(size); } mixed access(int i) { int j; if (i < 0) return 0; j = (hptr + i) % size; if (j >= 0 && j < size) return queue[j]; else return 0; } void pad_field(int count) { if (count < 10000) write(" "); if (count < 1000) write(" "); if (count < 100) write(" "); if (count < 10) write(" "); } void print(int start) { int j, label; j = hptr; label = start; do { pad_field(label); write(label + " " + queue[j] + "\n"); j = (j + 1) % size; label++; } while (j != tptr); } void remove() { destruct(this_object()); }