DIRECTORY FIFOQueue; FIFOQueueImpl: CEDAR MONITOR LOCKS queue USING queue: Queue EXPORTS FIFOQueue = BEGIN Queue: TYPE = FIFOQueue.Queue; Empty: PUBLIC ERROR = CODE; Create: PUBLIC PROC [] RETURNS [queue: Queue] = { queue _ NEW[FIFOQueue.QueueRec]; }; Include: PUBLIC ENTRY PROC [queue: Queue, value: REF] = { ENABLE UNWIND => NULL; IF queue.front=NIL THEN { queue.front _ queue.tail _ LIST[value]; BROADCAST queue.cond; } ELSE {queue.tail.rest _ LIST[value]; queue.tail _ queue.tail.rest} }; Remove: PUBLIC ENTRY PROC [queue: Queue] RETURNS [value: REF] = { ENABLE UNWIND => NULL; IF queue.front=NIL THEN RETURN WITH ERROR Empty; value _ queue.front.first; queue.front _ queue.front.rest; }; RemoveNWait: PUBLIC ENTRY PROC [queue: Queue] RETURNS [value: REF] = { ENABLE UNWIND => NULL; WHILE queue.front=NIL DO WAIT queue.cond ENDLOOP; value _ queue.front.first; queue.front _ queue.front.rest; }; IsEmpty: PUBLIC PROC [queue: Queue] RETURNS [BOOL] = { RETURN [queue.front=NIL] }; Flush: PUBLIC ENTRY PROC [queue: Queue] = { queue.front _ queue.tail _ NIL; }; END. άFIFOQueueImpl.mesa Copyright c 1986 by Xerox Corporation. All rights reserved. Created by: Christian Jacobi, September 16, 1986 10:44:49 am PDT Last edited by: Christian Jacobi, September 16, 1986 2:13:08 pm PDT Κ7˜codešœ™Kšœ Οmœ1™