dps/src/Fifo.i3


Copyright (C) 1994, Digital Equipment Corp.

INTERFACE Fifo;

IMPORT Thread;

TYPE E = OBJECT next: E; METHODS END;

TYPE SubsumerProc = PROCEDURE (new, old: E): E;

TYPE T = OBJECT
  mutex: MUTEX;
  condition: Thread.Condition;
  first: E; last: E;
  subsumerProc: SubsumerProc;
 METHODS
  Insert (e: E) := Insert;
  InsertMaybe (e: E) := Insert;
  RemoveOrNIL (): E:= RemoveOrNIL;
  RemoveOrWait (): E := RemoveOrWait;
  Count (): INTEGER := Count;
  Empty (): BOOLEAN := Empty;
  END;

PROCEDURE New (proc: SubsumerProc := NIL): T;

PROCEDURE Insert (t: T; e: E);
PROCEDURE RemoveOrNIL (t: T): E;
PROCEDURE RemoveOrWait (t: T): E;
PROCEDURE Count (t: T): INTEGER;
PROCEDURE Empty (t: T): BOOLEAN;

  END Fifo.