annotate gcc/ada/libgnat/i-c.ads @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
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 COMPILER COMPONENTS --
kono
parents:
diff changeset
4 -- --
kono
parents:
diff changeset
5 -- I N T E R F A C E S . C --
kono
parents:
diff changeset
6 -- --
kono
parents:
diff changeset
7 -- S p e c --
kono
parents:
diff changeset
8 -- --
kono
parents:
diff changeset
9 -- This specification is derived from the Ada Reference Manual for use with --
kono
parents:
diff changeset
10 -- GNAT. In accordance with the copyright of that document, you can freely --
kono
parents:
diff changeset
11 -- copy and modify this specification, provided that if you redistribute a --
kono
parents:
diff changeset
12 -- modified version, any changes that you have made are clearly indicated. --
kono
parents:
diff changeset
13 -- --
kono
parents:
diff changeset
14 ------------------------------------------------------------------------------
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 with System.Parameters;
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 package Interfaces.C is
kono
parents:
diff changeset
19 pragma Pure;
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 -- Declaration's based on C's <limits.h>
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 CHAR_BIT : constant := 8;
kono
parents:
diff changeset
24 SCHAR_MIN : constant := -128;
kono
parents:
diff changeset
25 SCHAR_MAX : constant := 127;
kono
parents:
diff changeset
26 UCHAR_MAX : constant := 255;
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 -- Signed and Unsigned Integers. Note that in GNAT, we have ensured that
kono
parents:
diff changeset
29 -- the standard predefined Ada types correspond to the standard C types
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 -- Note: the Integer qualifications used in the declaration of type long
kono
parents:
diff changeset
32 -- avoid ambiguities when compiling in the presence of s-auxdec.ads and
kono
parents:
diff changeset
33 -- a non-private system.address type.
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 type int is new Integer;
kono
parents:
diff changeset
36 type short is new Short_Integer;
kono
parents:
diff changeset
37 type long is range -(2 ** (System.Parameters.long_bits - Integer'(1)))
kono
parents:
diff changeset
38 .. +(2 ** (System.Parameters.long_bits - Integer'(1))) - 1;
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 type signed_char is range SCHAR_MIN .. SCHAR_MAX;
kono
parents:
diff changeset
41 for signed_char'Size use CHAR_BIT;
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 type unsigned is mod 2 ** int'Size;
kono
parents:
diff changeset
44 type unsigned_short is mod 2 ** short'Size;
kono
parents:
diff changeset
45 type unsigned_long is mod 2 ** long'Size;
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 type unsigned_char is mod (UCHAR_MAX + 1);
kono
parents:
diff changeset
48 for unsigned_char'Size use CHAR_BIT;
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 subtype plain_char is unsigned_char; -- ??? should be parameterized
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 -- Note: the Integer qualifications used in the declaration of ptrdiff_t
kono
parents:
diff changeset
53 -- avoid ambiguities when compiling in the presence of s-auxdec.ads and
kono
parents:
diff changeset
54 -- a non-private system.address type.
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 type ptrdiff_t is
kono
parents:
diff changeset
57 range -(2 ** (System.Parameters.ptr_bits - Integer'(1))) ..
kono
parents:
diff changeset
58 +(2 ** (System.Parameters.ptr_bits - Integer'(1)) - 1);
kono
parents:
diff changeset
59
kono
parents:
diff changeset
60 type size_t is mod 2 ** System.Parameters.ptr_bits;
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 -- Floating-Point
kono
parents:
diff changeset
63
kono
parents:
diff changeset
64 type C_float is new Float;
kono
parents:
diff changeset
65 type double is new Standard.Long_Float;
kono
parents:
diff changeset
66 type long_double is new Standard.Long_Long_Float;
kono
parents:
diff changeset
67
kono
parents:
diff changeset
68 ----------------------------
kono
parents:
diff changeset
69 -- Characters and Strings --
kono
parents:
diff changeset
70 ----------------------------
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72 type char is new Character;
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 nul : constant char := char'First;
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 function To_C (Item : Character) return char;
kono
parents:
diff changeset
77 function To_Ada (Item : char) return Character;
kono
parents:
diff changeset
78
kono
parents:
diff changeset
79 type char_array is array (size_t range <>) of aliased char;
kono
parents:
diff changeset
80 for char_array'Component_Size use CHAR_BIT;
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 function Is_Nul_Terminated (Item : char_array) return Boolean;
kono
parents:
diff changeset
83
kono
parents:
diff changeset
84 function To_C
kono
parents:
diff changeset
85 (Item : String;
kono
parents:
diff changeset
86 Append_Nul : Boolean := True) return char_array;
kono
parents:
diff changeset
87
kono
parents:
diff changeset
88 function To_Ada
kono
parents:
diff changeset
89 (Item : char_array;
kono
parents:
diff changeset
90 Trim_Nul : Boolean := True) return String;
kono
parents:
diff changeset
91
kono
parents:
diff changeset
92 procedure To_C
kono
parents:
diff changeset
93 (Item : String;
kono
parents:
diff changeset
94 Target : out char_array;
kono
parents:
diff changeset
95 Count : out size_t;
kono
parents:
diff changeset
96 Append_Nul : Boolean := True);
kono
parents:
diff changeset
97
kono
parents:
diff changeset
98 procedure To_Ada
kono
parents:
diff changeset
99 (Item : char_array;
kono
parents:
diff changeset
100 Target : out String;
kono
parents:
diff changeset
101 Count : out Natural;
kono
parents:
diff changeset
102 Trim_Nul : Boolean := True);
kono
parents:
diff changeset
103
kono
parents:
diff changeset
104 ------------------------------------
kono
parents:
diff changeset
105 -- Wide Character and Wide String --
kono
parents:
diff changeset
106 ------------------------------------
kono
parents:
diff changeset
107
kono
parents:
diff changeset
108 type wchar_t is new Wide_Character;
kono
parents:
diff changeset
109 for wchar_t'Size use Standard'Wchar_T_Size;
kono
parents:
diff changeset
110
kono
parents:
diff changeset
111 wide_nul : constant wchar_t := wchar_t'First;
kono
parents:
diff changeset
112
kono
parents:
diff changeset
113 function To_C (Item : Wide_Character) return wchar_t;
kono
parents:
diff changeset
114 function To_Ada (Item : wchar_t) return Wide_Character;
kono
parents:
diff changeset
115
kono
parents:
diff changeset
116 type wchar_array is array (size_t range <>) of aliased wchar_t;
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 function Is_Nul_Terminated (Item : wchar_array) return Boolean;
kono
parents:
diff changeset
119
kono
parents:
diff changeset
120 function To_C
kono
parents:
diff changeset
121 (Item : Wide_String;
kono
parents:
diff changeset
122 Append_Nul : Boolean := True) return wchar_array;
kono
parents:
diff changeset
123
kono
parents:
diff changeset
124 function To_Ada
kono
parents:
diff changeset
125 (Item : wchar_array;
kono
parents:
diff changeset
126 Trim_Nul : Boolean := True) return Wide_String;
kono
parents:
diff changeset
127
kono
parents:
diff changeset
128 procedure To_C
kono
parents:
diff changeset
129 (Item : Wide_String;
kono
parents:
diff changeset
130 Target : out wchar_array;
kono
parents:
diff changeset
131 Count : out size_t;
kono
parents:
diff changeset
132 Append_Nul : Boolean := True);
kono
parents:
diff changeset
133
kono
parents:
diff changeset
134 procedure To_Ada
kono
parents:
diff changeset
135 (Item : wchar_array;
kono
parents:
diff changeset
136 Target : out Wide_String;
kono
parents:
diff changeset
137 Count : out Natural;
kono
parents:
diff changeset
138 Trim_Nul : Boolean := True);
kono
parents:
diff changeset
139
kono
parents:
diff changeset
140 Terminator_Error : exception;
kono
parents:
diff changeset
141
kono
parents:
diff changeset
142 -- The remaining declarations are for Ada 2005 (AI-285)
kono
parents:
diff changeset
143
kono
parents:
diff changeset
144 -- ISO/IEC 10646:2003 compatible types defined by SC22/WG14 document N1010
kono
parents:
diff changeset
145
kono
parents:
diff changeset
146 type char16_t is new Wide_Character;
kono
parents:
diff changeset
147 pragma Ada_05 (char16_t);
kono
parents:
diff changeset
148
kono
parents:
diff changeset
149 char16_nul : constant char16_t := char16_t'Val (0);
kono
parents:
diff changeset
150 pragma Ada_05 (char16_nul);
kono
parents:
diff changeset
151
kono
parents:
diff changeset
152 function To_C (Item : Wide_Character) return char16_t;
kono
parents:
diff changeset
153 pragma Ada_05 (To_C);
kono
parents:
diff changeset
154
kono
parents:
diff changeset
155 function To_Ada (Item : char16_t) return Wide_Character;
kono
parents:
diff changeset
156 pragma Ada_05 (To_Ada);
kono
parents:
diff changeset
157
kono
parents:
diff changeset
158 type char16_array is array (size_t range <>) of aliased char16_t;
kono
parents:
diff changeset
159 pragma Ada_05 (char16_array);
kono
parents:
diff changeset
160
kono
parents:
diff changeset
161 function Is_Nul_Terminated (Item : char16_array) return Boolean;
kono
parents:
diff changeset
162 pragma Ada_05 (Is_Nul_Terminated);
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 function To_C
kono
parents:
diff changeset
165 (Item : Wide_String;
kono
parents:
diff changeset
166 Append_Nul : Boolean := True) return char16_array;
kono
parents:
diff changeset
167 pragma Ada_05 (To_C);
kono
parents:
diff changeset
168
kono
parents:
diff changeset
169 function To_Ada
kono
parents:
diff changeset
170 (Item : char16_array;
kono
parents:
diff changeset
171 Trim_Nul : Boolean := True) return Wide_String;
kono
parents:
diff changeset
172 pragma Ada_05 (To_Ada);
kono
parents:
diff changeset
173
kono
parents:
diff changeset
174 procedure To_C
kono
parents:
diff changeset
175 (Item : Wide_String;
kono
parents:
diff changeset
176 Target : out char16_array;
kono
parents:
diff changeset
177 Count : out size_t;
kono
parents:
diff changeset
178 Append_Nul : Boolean := True);
kono
parents:
diff changeset
179 pragma Ada_05 (To_C);
kono
parents:
diff changeset
180
kono
parents:
diff changeset
181 procedure To_Ada
kono
parents:
diff changeset
182 (Item : char16_array;
kono
parents:
diff changeset
183 Target : out Wide_String;
kono
parents:
diff changeset
184 Count : out Natural;
kono
parents:
diff changeset
185 Trim_Nul : Boolean := True);
kono
parents:
diff changeset
186 pragma Ada_05 (To_Ada);
kono
parents:
diff changeset
187
kono
parents:
diff changeset
188 type char32_t is new Wide_Wide_Character;
kono
parents:
diff changeset
189 pragma Ada_05 (char32_t);
kono
parents:
diff changeset
190
kono
parents:
diff changeset
191 char32_nul : constant char32_t := char32_t'Val (0);
kono
parents:
diff changeset
192 pragma Ada_05 (char32_nul);
kono
parents:
diff changeset
193
kono
parents:
diff changeset
194 function To_C (Item : Wide_Wide_Character) return char32_t;
kono
parents:
diff changeset
195 pragma Ada_05 (To_C);
kono
parents:
diff changeset
196
kono
parents:
diff changeset
197 function To_Ada (Item : char32_t) return Wide_Wide_Character;
kono
parents:
diff changeset
198 pragma Ada_05 (To_Ada);
kono
parents:
diff changeset
199
kono
parents:
diff changeset
200 type char32_array is array (size_t range <>) of aliased char32_t;
kono
parents:
diff changeset
201 pragma Ada_05 (char32_array);
kono
parents:
diff changeset
202
kono
parents:
diff changeset
203 function Is_Nul_Terminated (Item : char32_array) return Boolean;
kono
parents:
diff changeset
204 pragma Ada_05 (Is_Nul_Terminated);
kono
parents:
diff changeset
205
kono
parents:
diff changeset
206 function To_C
kono
parents:
diff changeset
207 (Item : Wide_Wide_String;
kono
parents:
diff changeset
208 Append_Nul : Boolean := True) return char32_array;
kono
parents:
diff changeset
209 pragma Ada_05 (To_C);
kono
parents:
diff changeset
210
kono
parents:
diff changeset
211 function To_Ada
kono
parents:
diff changeset
212 (Item : char32_array;
kono
parents:
diff changeset
213 Trim_Nul : Boolean := True) return Wide_Wide_String;
kono
parents:
diff changeset
214 pragma Ada_05 (To_Ada);
kono
parents:
diff changeset
215
kono
parents:
diff changeset
216 procedure To_C
kono
parents:
diff changeset
217 (Item : Wide_Wide_String;
kono
parents:
diff changeset
218 Target : out char32_array;
kono
parents:
diff changeset
219 Count : out size_t;
kono
parents:
diff changeset
220 Append_Nul : Boolean := True);
kono
parents:
diff changeset
221 pragma Ada_05 (To_C);
kono
parents:
diff changeset
222
kono
parents:
diff changeset
223 procedure To_Ada
kono
parents:
diff changeset
224 (Item : char32_array;
kono
parents:
diff changeset
225 Target : out Wide_Wide_String;
kono
parents:
diff changeset
226 Count : out Natural;
kono
parents:
diff changeset
227 Trim_Nul : Boolean := True);
kono
parents:
diff changeset
228 pragma Ada_05 (To_Ada);
kono
parents:
diff changeset
229
kono
parents:
diff changeset
230 end Interfaces.C;