(* Copyright (C) 1992, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* *) (* by Steve Glassman, Mark Manasse and Greg Nelson *) (* Last modified on Mon Feb 24 13:59:37 PST 1992 by muller *) (* modified on Wed Sep 11 15:51:37 PDT 1991 by msm *) <*PRAGMA LL*> UNSAFE INTERFACE XAtomQueue; IMPORT X; TYPE T = RECORD lo, hi: CARDINAL := 0; buff : REF ARRAY OF X.Atom := NIL END; (* buff[lo..hi-1] circularly are the active entries; lo = hi => the queue is empty; lo # hi => buff # NIL. *) CONST Empty = T{0, 0, NIL}; <*INLINE*> PROCEDURE IsEmpty (READONLY rb: T): BOOLEAN; (* Return whether rb is empty. *) PROCEDURE Insert (VAR rb: T; READONLY e: X.Atom); (* Insert e into rb, extending rb if necessary. *) EXCEPTION Exhausted; PROCEDURE Remove (VAR rb: T): X.Atom RAISES {Exhausted}; (* Raise the exception if br is empty, else remove the oldest element of rb and return it. *) END XAtomQueue.