comparison gcc/ada/libgnat/g-table.ads @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT RUN-TIME COMPONENTS --
4 -- --
5 -- G N A T . T A B L E --
6 -- --
7 -- S p e c --
8 -- --
9 -- Copyright (C) 1998-2017, 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 3, 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. --
17 -- --
18 -- As a special exception under Section 7 of GPL version 3, you are granted --
19 -- additional permissions described in the GCC Runtime Library Exception, --
20 -- version 3.1, as published by the Free Software Foundation. --
21 -- --
22 -- You should have received a copy of the GNU General Public License and --
23 -- a copy of the GCC Runtime Library Exception along with this program; --
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
25 -- <http://www.gnu.org/licenses/>. --
26 -- --
27 -- GNAT was originally developed by the GNAT team at New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc. --
29 -- --
30 ------------------------------------------------------------------------------
31
32 -- This package provides a singleton version of GNAT.Dynamic_Tables
33 -- (g-dyntab.ads). See that package for documentation. This package just
34 -- declares a single instance of GNAT.Dynamic_Tables.Instance, and provides
35 -- wrappers for all the subprograms, passing that single instance.
36
37 -- Note that these three interfaces should remain synchronized to keep as much
38 -- coherency as possible among these related units:
39 --
40 -- GNAT.Dynamic_Tables
41 -- GNAT.Table
42 -- Table (the compiler unit)
43
44 with GNAT.Dynamic_Tables;
45
46 generic
47 type Table_Component_Type is private;
48 type Table_Index_Type is range <>;
49
50 Table_Low_Bound : Table_Index_Type := Table_Index_Type'First;
51 Table_Initial : Positive := 8;
52 Table_Increment : Natural := 100;
53 Table_Name : String := ""; -- for debugging printouts
54 pragma Unreferenced (Table_Name);
55 Release_Threshold : Natural := 0;
56
57 package GNAT.Table is
58 pragma Elaborate_Body;
59
60 package Tab is new GNAT.Dynamic_Tables
61 (Table_Component_Type,
62 Table_Index_Type,
63 Table_Low_Bound,
64 Table_Initial,
65 Table_Increment,
66 Release_Threshold);
67
68 subtype Valid_Table_Index_Type is Tab.Valid_Table_Index_Type;
69 subtype Table_Last_Type is Tab.Table_Last_Type;
70 subtype Table_Type is Tab.Table_Type;
71 function "=" (X, Y : Table_Type) return Boolean renames Tab."=";
72
73 subtype Table_Ptr is Tab.Table_Ptr;
74
75 The_Instance : Tab.Instance;
76 Table : Table_Ptr renames The_Instance.Table;
77 Locked : Boolean renames The_Instance.Locked;
78
79 function Is_Empty return Boolean;
80
81 procedure Init;
82 pragma Inline (Init);
83 procedure Free;
84 pragma Inline (Free);
85
86 function First return Table_Index_Type;
87 pragma Inline (First);
88
89 function Last return Table_Last_Type;
90 pragma Inline (Last);
91
92 procedure Release;
93 pragma Inline (Release);
94
95 procedure Set_Last (New_Val : Table_Last_Type);
96 pragma Inline (Set_Last);
97
98 procedure Increment_Last;
99 pragma Inline (Increment_Last);
100
101 procedure Decrement_Last;
102 pragma Inline (Decrement_Last);
103
104 procedure Append (New_Val : Table_Component_Type);
105 pragma Inline (Append);
106
107 procedure Append_All (New_Vals : Table_Type);
108 pragma Inline (Append_All);
109
110 procedure Set_Item
111 (Index : Valid_Table_Index_Type;
112 Item : Table_Component_Type);
113 pragma Inline (Set_Item);
114
115 subtype Saved_Table is Tab.Instance;
116 -- Type used for Save/Restore subprograms
117
118 function Save return Saved_Table;
119 pragma Inline (Save);
120 -- Resets table to empty, but saves old contents of table in returned
121 -- value, for possible later restoration by a call to Restore.
122
123 procedure Restore (T : in out Saved_Table);
124 pragma Inline (Restore);
125 -- Given a Saved_Table value returned by a prior call to Save, restores
126 -- the table to the state it was in at the time of the Save call.
127
128 procedure Allocate (Num : Integer := 1);
129 function Allocate (Num : Integer := 1) return Valid_Table_Index_Type;
130 pragma Inline (Allocate);
131 -- Adds Num to Last. The function version also returns the old value of
132 -- Last + 1. Note that this function has the possible side effect of
133 -- reallocating the table. This means that a reference X.Table (X.Allocate)
134 -- is incorrect, since the call to X.Allocate may modify the results of
135 -- calling X.Table.
136
137 generic
138 with procedure Action
139 (Index : Valid_Table_Index_Type;
140 Item : Table_Component_Type;
141 Quit : in out Boolean) is <>;
142 procedure For_Each;
143 pragma Inline (For_Each);
144
145 generic
146 with function Lt (Comp1, Comp2 : Table_Component_Type) return Boolean;
147 procedure Sort_Table;
148 pragma Inline (Sort_Table);
149
150 end GNAT.Table;