Yurttas/PL/IL/Ada-95/F/06/mailbox/mailbox 00.adb
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;