1 ------------------------------------------------------------------------------
3 -- GNAT RUN-TIME COMPONENTS --
5 -- A D A . S T R I N G S . W I D E _ B O U N D E D --
10 -- Copyright (C) 1992-1997 Free Software Foundation, Inc. --
12 -- This specification is derived from the Ada Reference Manual for use with --
13 -- GNAT. The copyright notice above, and the license provisions that follow --
14 -- apply solely to the contents of the part following the private keyword. --
16 -- GNAT is free software; you can redistribute it and/or modify it under --
17 -- terms of the GNU General Public License as published by the Free Soft- --
18 -- ware Foundation; either version 2, or (at your option) any later ver- --
19 -- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
20 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
21 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
22 -- for more details. You should have received a copy of the GNU General --
23 -- Public License distributed with GNAT; see file COPYING. If not, write --
24 -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
25 -- MA 02111-1307, USA. --
27 -- As a special exception, if other files instantiate generics from this --
28 -- unit, or you link this unit with other files to produce an executable, --
29 -- this unit does not by itself cause the resulting executable to be --
30 -- covered by the GNU General Public License. This exception does not --
31 -- however invalidate any other reasons why the executable file might be --
32 -- covered by the GNU Public License. --
34 -- GNAT was originally developed by the GNAT team at New York University. --
35 -- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). --
37 ------------------------------------------------------------------------------
39 with Ada.Strings.Wide_Maps;
41 package Ada.Strings.Wide_Bounded is
42 pragma Preelaborate (Wide_Bounded);
46 -- Maximum length of a Bounded_Wide_String
48 package Generic_Bounded_Length is
50 Max_Length : constant Positive := Max;
52 type Bounded_Wide_String is private;
54 Null_Bounded_Wide_String : constant Bounded_Wide_String;
56 subtype Length_Range is Natural range 0 .. Max_Length;
58 function Length (Source : in Bounded_Wide_String) return Length_Range;
60 --------------------------------------------------------
61 -- Conversion, Concatenation, and Selection Functions --
62 --------------------------------------------------------
64 function To_Bounded_Wide_String
65 (Source : in Wide_String;
66 Drop : in Truncation := Error)
67 return Bounded_Wide_String;
69 function To_Wide_String
70 (Source : in Bounded_Wide_String)
74 (Left, Right : in Bounded_Wide_String;
75 Drop : in Truncation := Error)
76 return Bounded_Wide_String;
79 (Left : in Bounded_Wide_String;
80 Right : in Wide_String;
81 Drop : in Truncation := Error)
82 return Bounded_Wide_String;
85 (Left : in Wide_String;
86 Right : in Bounded_Wide_String;
87 Drop : in Truncation := Error)
88 return Bounded_Wide_String;
91 (Left : in Bounded_Wide_String;
92 Right : in Wide_Character;
93 Drop : in Truncation := Error)
94 return Bounded_Wide_String;
97 (Left : in Wide_Character;
98 Right : in Bounded_Wide_String;
99 Drop : in Truncation := Error)
100 return Bounded_Wide_String;
103 (Source : in out Bounded_Wide_String;
104 New_Item : in Bounded_Wide_String;
105 Drop : in Truncation := Error);
108 (Source : in out Bounded_Wide_String;
109 New_Item : in Wide_String;
110 Drop : in Truncation := Error);
113 (Source : in out Bounded_Wide_String;
114 New_Item : in Wide_Character;
115 Drop : in Truncation := Error);
118 (Left, Right : in Bounded_Wide_String)
119 return Bounded_Wide_String;
122 (Left : in Bounded_Wide_String;
123 Right : in Wide_String)
124 return Bounded_Wide_String;
127 (Left : in Wide_String;
128 Right : in Bounded_Wide_String)
129 return Bounded_Wide_String;
132 (Left : in Bounded_Wide_String;
133 Right : in Wide_Character)
134 return Bounded_Wide_String;
137 (Left : in Wide_Character;
138 Right : in Bounded_Wide_String)
139 return Bounded_Wide_String;
142 (Source : in Bounded_Wide_String;
144 return Wide_Character;
146 procedure Replace_Element
147 (Source : in out Bounded_Wide_String;
149 By : in Wide_Character);
152 (Source : in Bounded_Wide_String;
158 (Left : in Bounded_Wide_String;
159 Right : in Bounded_Wide_String)
163 (Left : in Bounded_Wide_String;
164 Right : in Wide_String)
168 (Left : in Wide_String;
169 Right : in Bounded_Wide_String)
173 (Left : in Bounded_Wide_String;
174 Right : in Bounded_Wide_String)
178 (Left : in Bounded_Wide_String;
179 Right : in Wide_String)
183 (Left : in Wide_String;
184 Right : in Bounded_Wide_String)
188 (Left : in Bounded_Wide_String;
189 Right : in Bounded_Wide_String)
193 (Left : in Bounded_Wide_String;
194 Right : in Wide_String)
198 (Left : in Wide_String;
199 Right : in Bounded_Wide_String)
203 (Left : in Bounded_Wide_String;
204 Right : in Bounded_Wide_String)
208 (Left : in Bounded_Wide_String;
209 Right : in Wide_String)
213 (Left : in Wide_String;
214 Right : in Bounded_Wide_String)
218 (Left : in Bounded_Wide_String;
219 Right : in Bounded_Wide_String)
223 (Left : in Bounded_Wide_String;
224 Right : in Wide_String)
228 (Left : in Wide_String;
229 Right : in Bounded_Wide_String)
232 ----------------------
233 -- Search Functions --
234 ----------------------
237 (Source : in Bounded_Wide_String;
238 Pattern : in Wide_String;
239 Going : in Direction := Forward;
240 Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
244 (Source : in Bounded_Wide_String;
245 Pattern : in Wide_String;
246 Going : in Direction := Forward;
247 Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
251 (Source : in Bounded_Wide_String;
252 Set : in Wide_Maps.Wide_Character_Set;
253 Test : in Membership := Inside;
254 Going : in Direction := Forward)
257 function Index_Non_Blank
258 (Source : in Bounded_Wide_String;
259 Going : in Direction := Forward)
263 (Source : in Bounded_Wide_String;
264 Pattern : in Wide_String;
265 Mapping : in Wide_Maps.Wide_Character_Mapping := Wide_Maps.Identity)
269 (Source : in Bounded_Wide_String;
270 Pattern : in Wide_String;
271 Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
275 (Source : in Bounded_Wide_String;
276 Set : in Wide_Maps.Wide_Character_Set)
280 (Source : in Bounded_Wide_String;
281 Set : in Wide_Maps.Wide_Character_Set;
282 Test : in Membership;
283 First : out Positive;
286 ------------------------------------
287 -- Wide_String Translation Subprograms --
288 ------------------------------------
291 (Source : in Bounded_Wide_String;
292 Mapping : in Wide_Maps.Wide_Character_Mapping)
293 return Bounded_Wide_String;
296 (Source : in out Bounded_Wide_String;
297 Mapping : in Wide_Maps.Wide_Character_Mapping);
300 (Source : in Bounded_Wide_String;
301 Mapping : in Wide_Maps.Wide_Character_Mapping_Function)
302 return Bounded_Wide_String;
305 (Source : in out Bounded_Wide_String;
306 Mapping : in Wide_Maps.Wide_Character_Mapping_Function);
308 ---------------------------------------
309 -- Wide_String Transformation Subprograms --
310 ---------------------------------------
312 function Replace_Slice
313 (Source : in Bounded_Wide_String;
317 Drop : in Truncation := Error)
318 return Bounded_Wide_String;
320 procedure Replace_Slice
321 (Source : in out Bounded_Wide_String;
325 Drop : in Truncation := Error);
328 (Source : in Bounded_Wide_String;
329 Before : in Positive;
330 New_Item : in Wide_String;
331 Drop : in Truncation := Error)
332 return Bounded_Wide_String;
335 (Source : in out Bounded_Wide_String;
336 Before : in Positive;
337 New_Item : in Wide_String;
338 Drop : in Truncation := Error);
341 (Source : in Bounded_Wide_String;
342 Position : in Positive;
343 New_Item : in Wide_String;
344 Drop : in Truncation := Error)
345 return Bounded_Wide_String;
348 (Source : in out Bounded_Wide_String;
349 Position : in Positive;
350 New_Item : in Wide_String;
351 Drop : in Truncation := Error);
354 (Source : in Bounded_Wide_String;
356 Through : in Natural)
357 return Bounded_Wide_String;
360 (Source : in out Bounded_Wide_String;
362 Through : in Natural);
364 ---------------------------------
365 -- Wide_String Selector Subprograms --
366 ---------------------------------
369 (Source : in Bounded_Wide_String;
371 return Bounded_Wide_String;
374 (Source : in out Bounded_Wide_String;
378 (Source : in Bounded_Wide_String;
379 Left : in Wide_Maps.Wide_Character_Set;
380 Right : in Wide_Maps.Wide_Character_Set)
381 return Bounded_Wide_String;
384 (Source : in out Bounded_Wide_String;
385 Left : in Wide_Maps.Wide_Character_Set;
386 Right : in Wide_Maps.Wide_Character_Set);
389 (Source : in Bounded_Wide_String;
391 Pad : in Wide_Character := Wide_Space;
392 Drop : in Truncation := Error)
393 return Bounded_Wide_String;
396 (Source : in out Bounded_Wide_String;
398 Pad : in Wide_Character := Wide_Space;
399 Drop : in Truncation := Error);
402 (Source : in Bounded_Wide_String;
404 Pad : in Wide_Character := Wide_Space;
405 Drop : in Truncation := Error)
406 return Bounded_Wide_String;
409 (Source : in out Bounded_Wide_String;
411 Pad : in Wide_Character := Wide_Space;
412 Drop : in Truncation := Error);
414 ------------------------------------
415 -- Wide_String Constructor Subprograms --
416 ------------------------------------
420 Right : in Wide_Character)
421 return Bounded_Wide_String;
425 Right : in Wide_String)
426 return Bounded_Wide_String;
430 Right : in Bounded_Wide_String)
431 return Bounded_Wide_String;
435 Item : in Wide_Character;
436 Drop : in Truncation := Error)
437 return Bounded_Wide_String;
441 Item : in Wide_String;
442 Drop : in Truncation := Error)
443 return Bounded_Wide_String;
447 Item : in Bounded_Wide_String;
448 Drop : in Truncation := Error)
449 return Bounded_Wide_String;
452 Wide_NUL : constant Wide_Character := Wide_Character'Val (0);
454 type Bounded_Wide_String is record
455 Length : Length_Range := 0;
456 Data : Wide_String (1 .. Max_Length);
459 Null_Bounded_Wide_String : constant Bounded_Wide_String :=
460 (Length => 0, Data => (1 .. Max_Length => Wide_NUL));
462 -- Pragma Inline declarations (GNAT specific additions)
466 pragma Inline ("<=");
468 pragma Inline (">=");
470 pragma Inline (Count);
471 pragma Inline (Element);
472 pragma Inline (Find_Token);
473 pragma Inline (Index);
474 pragma Inline (Index_Non_Blank);
475 pragma Inline (Length);
476 pragma Inline (Replace_Element);
477 pragma Inline (Slice);
478 pragma Inline (To_Bounded_Wide_String);
479 pragma Inline (To_Wide_String);
481 end Generic_Bounded_Length;
483 end Ada.Strings.Wide_Bounded;