Merge from mainline
[official-gcc.git] / gcc / ada / g-boubuf.adb
bloba8ac5f1a92137ef22d60fb38bf7413f4c0e7f479
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT COMPILER COMPONENTS --
4 -- --
5 -- G N A T . B O U N D E D _ B U F F E R S --
6 -- --
7 -- B o d y --
8 -- --
9 -- Copyright (C) 2003-2006, AdaCore --
10 -- --
11 -- GNAT is free software; you can redistribute it and/or modify it under --
12 -- terms of the GNU General Public License as published by the Free Soft- --
13 -- ware Foundation; either version 2, or (at your option) any later ver- --
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
17 -- for more details. You should have received a copy of the GNU General --
18 -- Public License distributed with GNAT; see file COPYING. If not, write --
19 -- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
20 -- Boston, MA 02110-1301, USA. --
21 -- --
22 -- As a special exception, if other files instantiate generics from this --
23 -- unit, or you link this unit with other files to produce an executable, --
24 -- this unit does not by itself cause the resulting executable to be --
25 -- covered by the GNU General Public License. This exception does not --
26 -- however invalidate any other reasons why the executable file might be --
27 -- covered by the GNU Public License. --
28 -- --
29 -- GNAT is maintained by Ada Core Technologies Inc (http://www.gnat.com). --
30 -- --
31 ------------------------------------------------------------------------------
33 package body GNAT.Bounded_Buffers is
35 --------------------
36 -- Bounded_Buffer --
37 --------------------
39 protected body Bounded_Buffer is
41 ------------
42 -- Insert --
43 ------------
45 entry Insert (Item : Element) when Count /= Capacity is
46 begin
47 Values (Next_In) := Item;
48 Next_In := (Next_In mod Capacity) + 1;
49 Count := Count + 1;
50 end Insert;
52 ------------
53 -- Remove --
54 ------------
56 entry Remove (Item : out Element) when Count > 0 is
57 begin
58 Item := Values (Next_Out);
59 Next_Out := (Next_Out mod Capacity) + 1;
60 Count := Count - 1;
61 end Remove;
63 -----------
64 -- Empty --
65 -----------
67 function Empty return Boolean is
68 begin
69 return Count = 0;
70 end Empty;
72 ----------
73 -- Full --
74 ----------
76 function Full return Boolean is
77 begin
78 return Count = Capacity;
79 end Full;
81 ------------
82 -- Extent --
83 ------------
85 function Extent return Natural is
86 begin
87 return Count;
88 end Extent;
90 end Bounded_Buffer;
92 end GNAT.Bounded_Buffers;