DIRECTORY Process USING [DisableTimeout, EnableAborts]; Queue: DEFINITIONS LOCKS queue USING queue: Handle IMPORTS Process = BEGIN length: CARDINAL = 12; Handle: TYPE = LONG POINTER TO Object; Item: TYPE = UNSPECIFIED; Object: TYPE = MONITORED RECORD [ body: ARRAY [FIRST[CARDINAL]..length) OF Item, head, tail: CARDINAL _ FIRST[CARDINAL], nonEmpty: CONDITION]; Empty: ENTRY PROCEDURE [queue: Handle] RETURNS [empty: BOOLEAN] = INLINE BEGIN ENABLE UNWIND => NULL; RETURN[empty: queue.tail = queue.head]; END; Full: ENTRY PROCEDURE [queue: Handle] RETURNS [full: BOOLEAN] = INLINE BEGIN ENABLE UNWIND => NULL; RETURN[full: (queue.tail + 1) MOD length = queue.head]; END; Initialize: ENTRY PROCEDURE [queue: Handle] = TRUSTED INLINE BEGIN ENABLE UNWIND => NULL; local: Object _ queue^; Process.DisableTimeout[condition: @local.nonEmpty]; Process.EnableAborts[pCondition: @local.nonEmpty]; RETURN; END; Pop: ENTRY PROCEDURE [queue: Handle] RETURNS [item: Item] = INLINE BEGIN ENABLE UNWIND => NULL; IF queue.tail = queue.head THEN WAIT queue.nonEmpty; item _ queue.body[queue.head]; queue.head _ SUCC[queue.head] MOD length; RETURN; END; Push: ENTRY PROCEDURE [queue: Handle, item: Item] = INLINE BEGIN ENABLE UNWIND => NULL; queue.body[queue.tail] _ item; queue.tail _ SUCC[queue.tail] MOD length; NOTIFY queue.nonEmpty; RETURN; END; END. LOG When / Who / What. 81/Claude Pany/Created. 11-Apr-83 14:39:32 - Trowell - created QueueImpl and removed INLINEs here for Sierra compiler bug workaround 10-Oct-83 3:34:28 - Strickberger - Restored INLINEs and deleted Impl. POINTER _ LONG POINTER for Klamth 19-Jul-85 1:28:55 - Strickberger - Add copyright. FixArrows. φFile Queue.mesa Copyright (C) Xerox Corporation 1981, 1982, 1983, 1984, 1985, 1986. All rights reserved. last edited by Strickberger 19-Jul-85 1:28:55 Tim Diebert: October 2, 1986 1:51:30 pm PDT Constants: TYPEs: INLINE ENTRY PROCEDUREs: ΚΦ˜šœ™JšœX™XJšœ.™.Icode™+—J˜šΟk ˜ Jšœœ ˜-—J˜š Οnœ œœœœ ˜JJšœ ™ —˜Jšœœ˜—˜Jšœ™—˜Jš œœœœœ˜&Jšœœ œ˜šœœ œœ˜!Jš œœœœ œ˜.Jšœ œœœ˜'Jšœ  œ˜——˜Jšœ™—˜š žœœ œœ œ˜HJš œœœœœ"œ˜I——˜š žœœ œœœ ˜LJšœœœ˜Jšœœ˜7Jšœ˜——˜š ž œœ œœœ˜BJšœœœ˜Jšœ˜Jšœ3˜3Jšœ2˜2Jšœ˜Jšœ˜——˜š žœœ œœ ˜HJšœœœ˜Jšœœœ˜4J˜Jšœ œ œ˜)Jšœ˜Jšœ˜——˜šžœœ œ ˜@Jšœœœ˜J˜Jšœ œ œ˜)Jšœ˜Jšœ˜Jšœ˜—Jšœ˜—J˜Jš˜J˜J˜J˜mJšœHœœœ ˜iJ˜=J˜—…—Œ X