1 ------------------------------------------------------------------------------
3 -- GNAT RUN-TIME COMPONENTS --
5 -- A D A . S T R I N G S . U N B O U N D E D --
10 -- Copyright (C) 1992-1998 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 -- Extensive contributions were provided by Ada Core Technologies Inc. --
37 ------------------------------------------------------------------------------
39 with Ada
.Strings
.Maps
;
40 with Ada
.Finalization
;
42 package Ada
.Strings
.Unbounded
is
43 pragma Preelaborate
(Unbounded
);
45 type Unbounded_String
is private;
47 Null_Unbounded_String
: constant Unbounded_String
;
49 function Length
(Source
: Unbounded_String
) return Natural;
51 type String_Access
is access all String;
53 procedure Free
(X
: in out String_Access
);
55 --------------------------------------------------------
56 -- Conversion, Concatenation, and Selection Functions --
57 --------------------------------------------------------
59 function To_Unbounded_String
(Source
: String) return Unbounded_String
;
60 function To_Unbounded_String
(Length
: in Natural) return Unbounded_String
;
62 function To_String
(Source
: Unbounded_String
) return String;
65 (Source
: in out Unbounded_String
;
66 New_Item
: in Unbounded_String
);
69 (Source
: in out Unbounded_String
;
70 New_Item
: in String);
73 (Source
: in out Unbounded_String
;
74 New_Item
: in Character);
76 function "&" (Left
, Right
: Unbounded_String
) return Unbounded_String
;
79 (Left
: in Unbounded_String
;
81 return Unbounded_String
;
85 Right
: in Unbounded_String
)
86 return Unbounded_String
;
89 (Left
: in Unbounded_String
;
91 return Unbounded_String
;
95 Right
: in Unbounded_String
)
96 return Unbounded_String
;
99 (Source
: in Unbounded_String
;
103 procedure Replace_Element
104 (Source
: in out Unbounded_String
;
109 (Source
: in Unbounded_String
;
114 function "=" (Left
, Right
: in Unbounded_String
) return Boolean;
117 (Left
: in Unbounded_String
;
123 Right
: in Unbounded_String
)
126 function "<" (Left
, Right
: in Unbounded_String
) return Boolean;
129 (Left
: in Unbounded_String
;
135 Right
: in Unbounded_String
)
138 function "<=" (Left
, Right
: in Unbounded_String
) return Boolean;
141 (Left
: in Unbounded_String
;
147 Right
: in Unbounded_String
)
150 function ">" (Left
, Right
: in Unbounded_String
) return Boolean;
153 (Left
: in Unbounded_String
;
159 Right
: in Unbounded_String
)
162 function ">=" (Left
, Right
: in Unbounded_String
) return Boolean;
165 (Left
: in Unbounded_String
;
171 Right
: in Unbounded_String
)
174 ------------------------
175 -- Search Subprograms --
176 ------------------------
179 (Source
: in Unbounded_String
;
181 Going
: in Direction
:= Forward
;
182 Mapping
: in Maps
.Character_Mapping
:= Maps
.Identity
)
186 (Source
: in Unbounded_String
;
188 Going
: in Direction
:= Forward
;
189 Mapping
: in Maps
.Character_Mapping_Function
)
193 (Source
: in Unbounded_String
;
194 Set
: in Maps
.Character_Set
;
195 Test
: in Membership
:= Inside
;
196 Going
: in Direction
:= Forward
)
199 function Index_Non_Blank
200 (Source
: in Unbounded_String
;
201 Going
: in Direction
:= Forward
)
205 (Source
: in Unbounded_String
;
207 Mapping
: in Maps
.Character_Mapping
:= Maps
.Identity
)
211 (Source
: in Unbounded_String
;
213 Mapping
: in Maps
.Character_Mapping_Function
)
217 (Source
: in Unbounded_String
;
218 Set
: in Maps
.Character_Set
)
222 (Source
: in Unbounded_String
;
223 Set
: in Maps
.Character_Set
;
224 Test
: in Membership
;
225 First
: out Positive;
228 ------------------------------------
229 -- String Translation Subprograms --
230 ------------------------------------
233 (Source
: in Unbounded_String
;
234 Mapping
: in Maps
.Character_Mapping
)
235 return Unbounded_String
;
238 (Source
: in out Unbounded_String
;
239 Mapping
: Maps
.Character_Mapping
);
242 (Source
: in Unbounded_String
;
243 Mapping
: in Maps
.Character_Mapping_Function
)
244 return Unbounded_String
;
247 (Source
: in out Unbounded_String
;
248 Mapping
: in Maps
.Character_Mapping_Function
);
250 ---------------------------------------
251 -- String Transformation Subprograms --
252 ---------------------------------------
254 function Replace_Slice
255 (Source
: in Unbounded_String
;
259 return Unbounded_String
;
261 procedure Replace_Slice
262 (Source
: in out Unbounded_String
;
268 (Source
: in Unbounded_String
;
269 Before
: in Positive;
270 New_Item
: in String)
271 return Unbounded_String
;
274 (Source
: in out Unbounded_String
;
275 Before
: in Positive;
276 New_Item
: in String);
279 (Source
: in Unbounded_String
;
280 Position
: in Positive;
281 New_Item
: in String)
282 return Unbounded_String
;
285 (Source
: in out Unbounded_String
;
286 Position
: in Positive;
287 New_Item
: in String);
290 (Source
: in Unbounded_String
;
292 Through
: in Natural)
293 return Unbounded_String
;
296 (Source
: in out Unbounded_String
;
298 Through
: in Natural);
301 (Source
: in Unbounded_String
;
303 return Unbounded_String
;
306 (Source
: in out Unbounded_String
;
310 (Source
: in Unbounded_String
;
311 Left
: in Maps
.Character_Set
;
312 Right
: in Maps
.Character_Set
)
313 return Unbounded_String
;
316 (Source
: in out Unbounded_String
;
317 Left
: in Maps
.Character_Set
;
318 Right
: in Maps
.Character_Set
);
321 (Source
: in Unbounded_String
;
323 Pad
: in Character := Space
)
324 return Unbounded_String
;
327 (Source
: in out Unbounded_String
;
329 Pad
: in Character := Space
);
332 (Source
: in Unbounded_String
;
334 Pad
: in Character := Space
)
335 return Unbounded_String
;
338 (Source
: in out Unbounded_String
;
340 Pad
: in Character := Space
);
344 Right
: in Character)
345 return Unbounded_String
;
350 return Unbounded_String
;
354 Right
: in Unbounded_String
)
355 return Unbounded_String
;
358 pragma Inline
(Length
);
360 package AF
renames Ada
.Finalization
;
362 Null_String
: aliased String := "";
364 function To_Unbounded
(S
: String) return Unbounded_String
365 renames To_Unbounded_String
;
367 type Unbounded_String
is new AF
.Controlled
with record
368 Reference
: String_Access
:= Null_String
'Access;
371 pragma Stream_Convert
(Unbounded_String
, To_Unbounded
, To_String
);
373 pragma Finalize_Storage_Only
(Unbounded_String
);
375 procedure Initialize
(Object
: in out Unbounded_String
);
376 procedure Adjust
(Object
: in out Unbounded_String
);
377 procedure Finalize
(Object
: in out Unbounded_String
);
379 Null_Unbounded_String
: constant Unbounded_String
:=
380 (AF
.Controlled
with Reference
=> Null_String
'Access);
382 end Ada
.Strings
.Unbounded
;