Yurttas/PL/IL/Ada-95/F/06/mailbox/mailbox 00.adb

From ZCubes Wiki
Jump to navigation Jump to search
 1--
 2-- Copyright(C) 1998
 3-- All Rights Reserved. Salih Yurttas, ZCubes, BitsOfCode Software Systems, Inc..
 4--
 5-- Permission to use, copy, modify, and distribute this
 6-- software and its documentation for EDUCATIONAL purposes
 7-- and without fee is hereby granted provided that this
 8-- copyright notice appears in all copies.
 9--
10 
11-- date   : January 1, 1998.
12-- author : Salih Yurttas.
13
14-- mailbox_00.adb
15
16
17procedure Mailbox_00 is
18
19  subtype Message is String(1..4);
20
21  M : Message := "2222";
22
23  task Mailbox is
24    entry Deposit(M : in Message);
25    entry Remove(M : out Message);
26  end Mailbox;
27
28  task body Mailbox is
29
30    Capacity : constant Integer := 16;
31
32    subtype Slot_Index is Integer range 0..Capacity-1;
33
34    Head,
35    Tail  : Slot_Index :=0;
36
37    Message_Number : Integer range 0..Capacity := 0;
38
39    type List_Message is array(Slot_Index) of Message;
40
41    Box : List_Message;
42
43  begin
44
45    loop
46      select 
47        when Message_Number<Capacity =>
48          accept Deposit(M : in Message) do
49            Box(Head) := M;
50            Head := (Head+1) mod Capacity;
51            Message_Number := Message_Number+1;
52          end Deposit;
53
54      or when Message_Number>0 =>
55          accept Remove(M : out Message) do
56            M := Box(Tail);
57            Tail := (Tail+1) mod Capacity;
58            Message_Number := Message_Number-1;
59          end Remove;
60      end select;
61    end loop;
62
63  end Mailbox;
64
65begin
66
67  null;
68
69end Mailbox_00;