annotate gcc/ada/libgnat/a-cuprqu.adb @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ------------------------------------------------------------------------------
kono
parents:
diff changeset
2 -- --
kono
parents:
diff changeset
3 -- GNAT LIBRARY COMPONENTS --
kono
parents:
diff changeset
4 -- --
kono
parents:
diff changeset
5 -- ADA.CONTAINERS.UNBOUNDED_PRIORITY_QUEUES --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- B o d y --
kono
parents:
diff changeset
8 -- --
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
9 -- Copyright (C) 2011-2019, Free Software Foundation, Inc. --
111
kono
parents:
diff changeset
10 -- --
kono
parents:
diff changeset
11 -- GNAT is free software; you can redistribute it and/or modify it under --
kono
parents:
diff changeset
12 -- terms of the GNU General Public License as published by the Free Soft- --
kono
parents:
diff changeset
13 -- ware Foundation; either version 3, or (at your option) any later ver- --
kono
parents:
diff changeset
14 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
kono
parents:
diff changeset
15 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
kono
parents:
diff changeset
16 -- or FITNESS FOR A PARTICULAR PURPOSE. --
kono
parents:
diff changeset
17 -- --
kono
parents:
diff changeset
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
kono
parents:
diff changeset
19 -- additional permissions described in the GCC Runtime Library Exception, --
kono
parents:
diff changeset
20 -- version 3.1, as published by the Free Software Foundation. --
kono
parents:
diff changeset
21 -- --
kono
parents:
diff changeset
22 -- You should have received a copy of the GNU General Public License and --
kono
parents:
diff changeset
23 -- a copy of the GCC Runtime Library Exception along with this program; --
kono
parents:
diff changeset
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
kono
parents:
diff changeset
25 -- <http://www.gnu.org/licenses/>. --
kono
parents:
diff changeset
26 -- --
kono
parents:
diff changeset
27 -- This unit was originally developed by Matthew J Heaney. --
kono
parents:
diff changeset
28 ------------------------------------------------------------------------------
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 package body Ada.Containers.Unbounded_Priority_Queues is
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 protected body Queue is
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 -----------------
kono
parents:
diff changeset
35 -- Current_Use --
kono
parents:
diff changeset
36 -----------------
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 function Current_Use return Count_Type is
kono
parents:
diff changeset
39 begin
kono
parents:
diff changeset
40 return Q_Elems.Length;
kono
parents:
diff changeset
41 end Current_Use;
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 -------------
kono
parents:
diff changeset
44 -- Dequeue --
kono
parents:
diff changeset
45 -------------
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 entry Dequeue (Element : out Queue_Interfaces.Element_Type)
kono
parents:
diff changeset
48 when Q_Elems.Length > 0
kono
parents:
diff changeset
49 is
kono
parents:
diff changeset
50 -- Grab the first item of the set, and remove it from the set
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 C : constant Cursor := First (Q_Elems);
kono
parents:
diff changeset
53 begin
kono
parents:
diff changeset
54 Element := Sets.Element (C).Item;
kono
parents:
diff changeset
55 Delete_First (Q_Elems);
kono
parents:
diff changeset
56 end Dequeue;
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 --------------------------------
kono
parents:
diff changeset
59 -- Dequeue_Only_High_Priority --
kono
parents:
diff changeset
60 --------------------------------
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 procedure Dequeue_Only_High_Priority
kono
parents:
diff changeset
63 (At_Least : Queue_Priority;
kono
parents:
diff changeset
64 Element : in out Queue_Interfaces.Element_Type;
kono
parents:
diff changeset
65 Success : out Boolean)
kono
parents:
diff changeset
66 is
kono
parents:
diff changeset
67 -- Grab the first item. If it exists and has appropriate priority,
kono
parents:
diff changeset
68 -- set Success to True, and remove that item. Otherwise, set Success
kono
parents:
diff changeset
69 -- to False.
kono
parents:
diff changeset
70
kono
parents:
diff changeset
71 C : constant Cursor := First (Q_Elems);
kono
parents:
diff changeset
72 begin
kono
parents:
diff changeset
73 Success := Has_Element (C) and then
kono
parents:
diff changeset
74 not Before (At_Least, Get_Priority (Sets.Element (C).Item));
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 if Success then
kono
parents:
diff changeset
77 Element := Sets.Element (C).Item;
kono
parents:
diff changeset
78 Delete_First (Q_Elems);
kono
parents:
diff changeset
79 end if;
kono
parents:
diff changeset
80 end Dequeue_Only_High_Priority;
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 -------------
kono
parents:
diff changeset
83 -- Enqueue --
kono
parents:
diff changeset
84 -------------
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 entry Enqueue (New_Item : Queue_Interfaces.Element_Type) when True is
kono
parents:
diff changeset
87 begin
kono
parents:
diff changeset
88 Insert (Q_Elems, (Next_Sequence_Number, New_Item));
kono
parents:
diff changeset
89 Next_Sequence_Number := Next_Sequence_Number + 1;
kono
parents:
diff changeset
90
kono
parents:
diff changeset
91 -- If we reached a new high-water mark, increase Max_Length
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 if Q_Elems.Length > Max_Length then
kono
parents:
diff changeset
94 pragma Assert (Max_Length + 1 = Q_Elems.Length);
kono
parents:
diff changeset
95 Max_Length := Q_Elems.Length;
kono
parents:
diff changeset
96 end if;
kono
parents:
diff changeset
97 end Enqueue;
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 --------------
kono
parents:
diff changeset
100 -- Peak_Use --
kono
parents:
diff changeset
101 --------------
kono
parents:
diff changeset
102
kono
parents:
diff changeset
103 function Peak_Use return Count_Type is
kono
parents:
diff changeset
104 begin
kono
parents:
diff changeset
105 return Max_Length;
kono
parents:
diff changeset
106 end Peak_Use;
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 end Queue;
kono
parents:
diff changeset
109
kono
parents:
diff changeset
110 end Ada.Containers.Unbounded_Priority_Queues;