PR rtl-optimization/82913
[official-gcc.git] / gcc / ada / libgnat / s-ststop.adb
blobea020653e970aca895b0f4f58cd91b27f032f74f
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
4 -- --
5 -- S Y S T E M . S T R I N G S . S T R E A M _ O P S --
6 -- --
7 -- B o d y --
8 -- --
9 -- Copyright (C) 2008-2017, Free Software Foundation, Inc. --
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 ------------------------------------------------------------------------------
32 pragma Compiler_Unit_Warning;
34 with Ada.Streams; use Ada.Streams;
35 with Ada.Streams.Stream_IO; use Ada.Streams.Stream_IO;
36 with Ada.Unchecked_Conversion;
38 with System; use System;
39 with System.Storage_Elements; use System.Storage_Elements;
40 with System.Stream_Attributes;
42 package body System.Strings.Stream_Ops is
44 -- The following type describes the low-level IO mechanism used in package
45 -- Stream_Ops_Internal.
47 type IO_Kind is (Byte_IO, Block_IO);
49 -- The following package provides an IO framework for strings. Depending
50 -- on the version of System.Stream_Attributes as well as the size of
51 -- formal parameter Element_Type, the package will either utilize block
52 -- IO or element-by-element IO.
54 generic
55 type Element_Type is private;
56 type Index_Type is range <>;
57 type Array_Type is array (Index_Type range <>) of Element_Type;
59 package Stream_Ops_Internal is
60 function Input
61 (Strm : access Root_Stream_Type'Class;
62 IO : IO_Kind;
63 Max_Length : Long_Integer := Long_Integer'Last) return Array_Type;
64 -- Raises an exception if you try to read a String that is longer than
65 -- Max_Length. See expansion of Attribute_Input in Exp_Attr for details.
67 procedure Output
68 (Strm : access Root_Stream_Type'Class;
69 Item : Array_Type;
70 IO : IO_Kind);
72 procedure Read
73 (Strm : access Root_Stream_Type'Class;
74 Item : out Array_Type;
75 IO : IO_Kind);
77 procedure Write
78 (Strm : access Root_Stream_Type'Class;
79 Item : Array_Type;
80 IO : IO_Kind);
81 end Stream_Ops_Internal;
83 -------------------------
84 -- Stream_Ops_Internal --
85 -------------------------
87 package body Stream_Ops_Internal is
89 -- The following value represents the number of BITS allocated for the
90 -- default block used in string IO. The sizes of all other types are
91 -- calculated relative to this value.
93 Default_Block_Size : constant := 512 * 8;
95 -- Shorthand notation for stream element and element type sizes
97 ET_Size : constant Integer := Element_Type'Size;
98 SE_Size : constant Integer := Stream_Element'Size;
100 -- The following constants describe the number of array elements or
101 -- stream elements that can fit into a default block.
103 AE_In_Default_Block : constant Index_Type :=
104 Index_Type (Default_Block_Size / ET_Size);
105 -- Number of array elements in a default block
107 SE_In_Default_Block : constant Integer := Default_Block_Size / SE_Size;
108 -- Number of storage elements in a default block
110 -- Buffer types
112 subtype Default_Block is Stream_Element_Array
113 (1 .. Stream_Element_Offset (SE_In_Default_Block));
115 subtype Array_Block is
116 Array_Type (Index_Type range 1 .. AE_In_Default_Block);
118 -- Conversions to and from Default_Block
120 function To_Default_Block is
121 new Ada.Unchecked_Conversion (Array_Block, Default_Block);
123 function To_Array_Block is
124 new Ada.Unchecked_Conversion (Default_Block, Array_Block);
126 -----------
127 -- Input --
128 -----------
130 function Input
131 (Strm : access Root_Stream_Type'Class;
132 IO : IO_Kind;
133 Max_Length : Long_Integer := Long_Integer'Last) return Array_Type
135 pragma Unsuppress (All_Checks);
136 -- The above makes T'Class'Input robust in the case of bad data. The
137 -- declaration of Item below could raise Storage_Error if the length
138 -- is too big.
140 begin
141 if Strm = null then
142 raise Constraint_Error;
143 end if;
145 declare
146 Low, High : Index_Type'Base;
147 begin
148 -- Read the bounds of the string. Note that they could be out of
149 -- range of Index_Type in the case of empty arrays.
151 Index_Type'Read (Strm, Low);
152 Index_Type'Read (Strm, High);
154 if Long_Integer (High) - Long_Integer (Low) > Max_Length then
155 raise Constraint_Error;
156 end if;
158 -- Read the character content of the string
160 declare
161 Item : Array_Type (Low .. High);
162 begin
163 Read (Strm, Item, IO);
164 return Item;
165 end;
166 end;
167 end Input;
169 ------------
170 -- Output --
171 ------------
173 procedure Output
174 (Strm : access Root_Stream_Type'Class;
175 Item : Array_Type;
176 IO : IO_Kind)
178 begin
179 if Strm = null then
180 raise Constraint_Error;
181 end if;
183 -- Write the bounds of the string
185 Index_Type'Write (Strm, Item'First);
186 Index_Type'Write (Strm, Item'Last);
188 -- Write the character content of the string
190 Write (Strm, Item, IO);
191 end Output;
193 ----------
194 -- Read --
195 ----------
197 procedure Read
198 (Strm : access Root_Stream_Type'Class;
199 Item : out Array_Type;
200 IO : IO_Kind)
202 begin
203 if Strm = null then
204 raise Constraint_Error;
205 end if;
207 -- Nothing to do if the desired string is empty
209 if Item'Length = 0 then
210 return;
211 end if;
213 -- Block IO
215 if IO = Block_IO and then Stream_Attributes.Block_IO_OK then
216 declare
217 -- Determine the size in BITS of the block necessary to contain
218 -- the whole string.
220 Block_Size : constant Natural :=
221 Integer (Item'Last - Item'First + 1) * ET_Size;
223 -- Item can be larger than what the default block can store,
224 -- determine the number of whole reads necessary to read the
225 -- string.
227 Blocks : constant Natural := Block_Size / Default_Block_Size;
229 -- The size of Item may not be a multiple of the default block
230 -- size, determine the size of the remaining chunk in BITS.
232 Rem_Size : constant Natural :=
233 Block_Size mod Default_Block_Size;
235 -- String indexes
237 Low : Index_Type := Item'First;
238 High : Index_Type := Low + AE_In_Default_Block - 1;
240 -- End of stream error detection
242 Last : Stream_Element_Offset := 0;
243 Sum : Stream_Element_Offset := 0;
245 begin
246 -- Step 1: If the string is too large, read in individual
247 -- chunks the size of the default block.
249 if Blocks > 0 then
250 declare
251 Block : Default_Block;
253 begin
254 for Counter in 1 .. Blocks loop
255 Read (Strm.all, Block, Last);
256 Item (Low .. High) := To_Array_Block (Block);
258 Low := High + 1;
259 High := Low + AE_In_Default_Block - 1;
260 Sum := Sum + Last;
261 Last := 0;
262 end loop;
263 end;
264 end if;
266 -- Step 2: Read in any remaining elements
268 if Rem_Size > 0 then
269 declare
270 subtype Rem_Block is Stream_Element_Array
271 (1 .. Stream_Element_Offset (Rem_Size / SE_Size));
273 subtype Rem_Array_Block is
274 Array_Type (Index_Type range
275 1 .. Index_Type (Rem_Size / ET_Size));
277 function To_Rem_Array_Block is new
278 Ada.Unchecked_Conversion (Rem_Block, Rem_Array_Block);
280 Block : Rem_Block;
282 begin
283 Read (Strm.all, Block, Last);
284 Item (Low .. Item'Last) := To_Rem_Array_Block (Block);
286 Sum := Sum + Last;
287 end;
288 end if;
290 -- Step 3: Potential error detection. The sum of all the
291 -- chunks is less than we initially wanted to read. In other
292 -- words, the stream does not contain enough elements to fully
293 -- populate Item.
295 if (Integer (Sum) * SE_Size) / ET_Size < Item'Length then
296 raise End_Error;
297 end if;
298 end;
300 -- Byte IO
302 else
303 declare
304 E : Element_Type;
305 begin
306 for Index in Item'First .. Item'Last loop
307 Element_Type'Read (Strm, E);
308 Item (Index) := E;
309 end loop;
310 end;
311 end if;
312 end Read;
314 -----------
315 -- Write --
316 -----------
318 procedure Write
319 (Strm : access Root_Stream_Type'Class;
320 Item : Array_Type;
321 IO : IO_Kind)
323 begin
324 if Strm = null then
325 raise Constraint_Error;
326 end if;
328 -- Nothing to do if the input string is empty
330 if Item'Length = 0 then
331 return;
332 end if;
334 -- Block IO
336 if IO = Block_IO and then Stream_Attributes.Block_IO_OK then
337 declare
338 -- Determine the size in BITS of the block necessary to contain
339 -- the whole string.
341 Block_Size : constant Natural := Item'Length * ET_Size;
343 -- Item can be larger than what the default block can store,
344 -- determine the number of whole writes necessary to output the
345 -- string.
347 Blocks : constant Natural := Block_Size / Default_Block_Size;
349 -- The size of Item may not be a multiple of the default block
350 -- size, determine the size of the remaining chunk.
352 Rem_Size : constant Natural :=
353 Block_Size mod Default_Block_Size;
355 -- String indexes
357 Low : Index_Type := Item'First;
358 High : Index_Type := Low + AE_In_Default_Block - 1;
360 begin
361 -- Step 1: If the string is too large, write out individual
362 -- chunks the size of the default block.
364 for Counter in 1 .. Blocks loop
365 Write (Strm.all, To_Default_Block (Item (Low .. High)));
366 Low := High + 1;
367 High := Low + AE_In_Default_Block - 1;
368 end loop;
370 -- Step 2: Write out any remaining elements
372 if Rem_Size > 0 then
373 declare
374 subtype Rem_Block is Stream_Element_Array
375 (1 .. Stream_Element_Offset (Rem_Size / SE_Size));
377 subtype Rem_Array_Block is
378 Array_Type (Index_Type range
379 1 .. Index_Type (Rem_Size / ET_Size));
381 function To_Rem_Block is new
382 Ada.Unchecked_Conversion (Rem_Array_Block, Rem_Block);
384 begin
385 Write (Strm.all, To_Rem_Block (Item (Low .. Item'Last)));
386 end;
387 end if;
388 end;
390 -- Byte IO
392 else
393 for Index in Item'First .. Item'Last loop
394 Element_Type'Write (Strm, Item (Index));
395 end loop;
396 end if;
397 end Write;
398 end Stream_Ops_Internal;
400 -- Specific instantiations for all Ada array types handled
402 package Storage_Array_Ops is
403 new Stream_Ops_Internal
404 (Element_Type => Storage_Element,
405 Index_Type => Storage_Offset,
406 Array_Type => Storage_Array);
408 package Stream_Element_Array_Ops is
409 new Stream_Ops_Internal
410 (Element_Type => Stream_Element,
411 Index_Type => Stream_Element_Offset,
412 Array_Type => Stream_Element_Array);
414 package String_Ops is
415 new Stream_Ops_Internal
416 (Element_Type => Character,
417 Index_Type => Positive,
418 Array_Type => String);
420 package Wide_String_Ops is
421 new Stream_Ops_Internal
422 (Element_Type => Wide_Character,
423 Index_Type => Positive,
424 Array_Type => Wide_String);
426 package Wide_Wide_String_Ops is
427 new Stream_Ops_Internal
428 (Element_Type => Wide_Wide_Character,
429 Index_Type => Positive,
430 Array_Type => Wide_Wide_String);
432 -------------------------
433 -- Storage_Array_Input --
434 -------------------------
436 function Storage_Array_Input
437 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Storage_Array
439 begin
440 return Storage_Array_Ops.Input (Strm, Byte_IO);
441 end Storage_Array_Input;
443 --------------------------------
444 -- Storage_Array_Input_Blk_IO --
445 --------------------------------
447 function Storage_Array_Input_Blk_IO
448 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Storage_Array
450 begin
451 return Storage_Array_Ops.Input (Strm, Block_IO);
452 end Storage_Array_Input_Blk_IO;
454 --------------------------
455 -- Storage_Array_Output --
456 --------------------------
458 procedure Storage_Array_Output
459 (Strm : access Ada.Streams.Root_Stream_Type'Class;
460 Item : Storage_Array)
462 begin
463 Storage_Array_Ops.Output (Strm, Item, Byte_IO);
464 end Storage_Array_Output;
466 ---------------------------------
467 -- Storage_Array_Output_Blk_IO --
468 ---------------------------------
470 procedure Storage_Array_Output_Blk_IO
471 (Strm : access Ada.Streams.Root_Stream_Type'Class;
472 Item : Storage_Array)
474 begin
475 Storage_Array_Ops.Output (Strm, Item, Block_IO);
476 end Storage_Array_Output_Blk_IO;
478 ------------------------
479 -- Storage_Array_Read --
480 ------------------------
482 procedure Storage_Array_Read
483 (Strm : access Ada.Streams.Root_Stream_Type'Class;
484 Item : out Storage_Array)
486 begin
487 Storage_Array_Ops.Read (Strm, Item, Byte_IO);
488 end Storage_Array_Read;
490 -------------------------------
491 -- Storage_Array_Read_Blk_IO --
492 -------------------------------
494 procedure Storage_Array_Read_Blk_IO
495 (Strm : access Ada.Streams.Root_Stream_Type'Class;
496 Item : out Storage_Array)
498 begin
499 Storage_Array_Ops.Read (Strm, Item, Block_IO);
500 end Storage_Array_Read_Blk_IO;
502 -------------------------
503 -- Storage_Array_Write --
504 -------------------------
506 procedure Storage_Array_Write
507 (Strm : access Ada.Streams.Root_Stream_Type'Class;
508 Item : Storage_Array)
510 begin
511 Storage_Array_Ops.Write (Strm, Item, Byte_IO);
512 end Storage_Array_Write;
514 --------------------------------
515 -- Storage_Array_Write_Blk_IO --
516 --------------------------------
518 procedure Storage_Array_Write_Blk_IO
519 (Strm : access Ada.Streams.Root_Stream_Type'Class;
520 Item : Storage_Array)
522 begin
523 Storage_Array_Ops.Write (Strm, Item, Block_IO);
524 end Storage_Array_Write_Blk_IO;
526 --------------------------------
527 -- Stream_Element_Array_Input --
528 --------------------------------
530 function Stream_Element_Array_Input
531 (Strm : access Ada.Streams.Root_Stream_Type'Class)
532 return Stream_Element_Array
534 begin
535 return Stream_Element_Array_Ops.Input (Strm, Byte_IO);
536 end Stream_Element_Array_Input;
538 ---------------------------------------
539 -- Stream_Element_Array_Input_Blk_IO --
540 ---------------------------------------
542 function Stream_Element_Array_Input_Blk_IO
543 (Strm : access Ada.Streams.Root_Stream_Type'Class)
544 return Stream_Element_Array
546 begin
547 return Stream_Element_Array_Ops.Input (Strm, Block_IO);
548 end Stream_Element_Array_Input_Blk_IO;
550 ---------------------------------
551 -- Stream_Element_Array_Output --
552 ---------------------------------
554 procedure Stream_Element_Array_Output
555 (Strm : access Ada.Streams.Root_Stream_Type'Class;
556 Item : Stream_Element_Array)
558 begin
559 Stream_Element_Array_Ops.Output (Strm, Item, Byte_IO);
560 end Stream_Element_Array_Output;
562 ----------------------------------------
563 -- Stream_Element_Array_Output_Blk_IO --
564 ----------------------------------------
566 procedure Stream_Element_Array_Output_Blk_IO
567 (Strm : access Ada.Streams.Root_Stream_Type'Class;
568 Item : Stream_Element_Array)
570 begin
571 Stream_Element_Array_Ops.Output (Strm, Item, Block_IO);
572 end Stream_Element_Array_Output_Blk_IO;
574 -------------------------------
575 -- Stream_Element_Array_Read --
576 -------------------------------
578 procedure Stream_Element_Array_Read
579 (Strm : access Ada.Streams.Root_Stream_Type'Class;
580 Item : out Stream_Element_Array)
582 begin
583 Stream_Element_Array_Ops.Read (Strm, Item, Byte_IO);
584 end Stream_Element_Array_Read;
586 --------------------------------------
587 -- Stream_Element_Array_Read_Blk_IO --
588 --------------------------------------
590 procedure Stream_Element_Array_Read_Blk_IO
591 (Strm : access Ada.Streams.Root_Stream_Type'Class;
592 Item : out Stream_Element_Array)
594 begin
595 Stream_Element_Array_Ops.Read (Strm, Item, Block_IO);
596 end Stream_Element_Array_Read_Blk_IO;
598 --------------------------------
599 -- Stream_Element_Array_Write --
600 --------------------------------
602 procedure Stream_Element_Array_Write
603 (Strm : access Ada.Streams.Root_Stream_Type'Class;
604 Item : Stream_Element_Array)
606 begin
607 Stream_Element_Array_Ops.Write (Strm, Item, Byte_IO);
608 end Stream_Element_Array_Write;
610 ---------------------------------------
611 -- Stream_Element_Array_Write_Blk_IO --
612 ---------------------------------------
614 procedure Stream_Element_Array_Write_Blk_IO
615 (Strm : access Ada.Streams.Root_Stream_Type'Class;
616 Item : Stream_Element_Array)
618 begin
619 Stream_Element_Array_Ops.Write (Strm, Item, Block_IO);
620 end Stream_Element_Array_Write_Blk_IO;
622 ------------------
623 -- String_Input --
624 ------------------
626 function String_Input
627 (Strm : access Ada.Streams.Root_Stream_Type'Class) return String
629 begin
630 return String_Ops.Input (Strm, Byte_IO);
631 end String_Input;
633 -------------------------
634 -- String_Input_Blk_IO --
635 -------------------------
637 function String_Input_Blk_IO
638 (Strm : access Ada.Streams.Root_Stream_Type'Class) return String
640 begin
641 return String_Ops.Input (Strm, Block_IO);
642 end String_Input_Blk_IO;
644 -------------------------
645 -- String_Input_Tag --
646 -------------------------
648 function String_Input_Tag
649 (Strm : access Ada.Streams.Root_Stream_Type'Class) return String
651 begin
652 return String_Ops.Input (Strm, Block_IO, Max_Length => 10_000);
653 end String_Input_Tag;
655 -------------------
656 -- String_Output --
657 -------------------
659 procedure String_Output
660 (Strm : access Ada.Streams.Root_Stream_Type'Class;
661 Item : String)
663 begin
664 String_Ops.Output (Strm, Item, Byte_IO);
665 end String_Output;
667 --------------------------
668 -- String_Output_Blk_IO --
669 --------------------------
671 procedure String_Output_Blk_IO
672 (Strm : access Ada.Streams.Root_Stream_Type'Class;
673 Item : String)
675 begin
676 String_Ops.Output (Strm, Item, Block_IO);
677 end String_Output_Blk_IO;
679 -----------------
680 -- String_Read --
681 -----------------
683 procedure String_Read
684 (Strm : access Ada.Streams.Root_Stream_Type'Class;
685 Item : out String)
687 begin
688 String_Ops.Read (Strm, Item, Byte_IO);
689 end String_Read;
691 ------------------------
692 -- String_Read_Blk_IO --
693 ------------------------
695 procedure String_Read_Blk_IO
696 (Strm : access Ada.Streams.Root_Stream_Type'Class;
697 Item : out String)
699 begin
700 String_Ops.Read (Strm, Item, Block_IO);
701 end String_Read_Blk_IO;
703 ------------------
704 -- String_Write --
705 ------------------
707 procedure String_Write
708 (Strm : access Ada.Streams.Root_Stream_Type'Class;
709 Item : String)
711 begin
712 String_Ops.Write (Strm, Item, Byte_IO);
713 end String_Write;
715 -------------------------
716 -- String_Write_Blk_IO --
717 -------------------------
719 procedure String_Write_Blk_IO
720 (Strm : access Ada.Streams.Root_Stream_Type'Class;
721 Item : String)
723 begin
724 String_Ops.Write (Strm, Item, Block_IO);
725 end String_Write_Blk_IO;
727 -----------------------
728 -- Wide_String_Input --
729 -----------------------
731 function Wide_String_Input
732 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Wide_String
734 begin
735 return Wide_String_Ops.Input (Strm, Byte_IO);
736 end Wide_String_Input;
738 ------------------------------
739 -- Wide_String_Input_Blk_IO --
740 ------------------------------
742 function Wide_String_Input_Blk_IO
743 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Wide_String
745 begin
746 return Wide_String_Ops.Input (Strm, Block_IO);
747 end Wide_String_Input_Blk_IO;
749 ------------------------
750 -- Wide_String_Output --
751 ------------------------
753 procedure Wide_String_Output
754 (Strm : access Ada.Streams.Root_Stream_Type'Class;
755 Item : Wide_String)
757 begin
758 Wide_String_Ops.Output (Strm, Item, Byte_IO);
759 end Wide_String_Output;
761 -------------------------------
762 -- Wide_String_Output_Blk_IO --
763 -------------------------------
765 procedure Wide_String_Output_Blk_IO
766 (Strm : access Ada.Streams.Root_Stream_Type'Class;
767 Item : Wide_String)
769 begin
770 Wide_String_Ops.Output (Strm, Item, Block_IO);
771 end Wide_String_Output_Blk_IO;
773 ----------------------
774 -- Wide_String_Read --
775 ----------------------
777 procedure Wide_String_Read
778 (Strm : access Ada.Streams.Root_Stream_Type'Class;
779 Item : out Wide_String)
781 begin
782 Wide_String_Ops.Read (Strm, Item, Byte_IO);
783 end Wide_String_Read;
785 -----------------------------
786 -- Wide_String_Read_Blk_IO --
787 -----------------------------
789 procedure Wide_String_Read_Blk_IO
790 (Strm : access Ada.Streams.Root_Stream_Type'Class;
791 Item : out Wide_String)
793 begin
794 Wide_String_Ops.Read (Strm, Item, Block_IO);
795 end Wide_String_Read_Blk_IO;
797 -----------------------
798 -- Wide_String_Write --
799 -----------------------
801 procedure Wide_String_Write
802 (Strm : access Ada.Streams.Root_Stream_Type'Class;
803 Item : Wide_String)
805 begin
806 Wide_String_Ops.Write (Strm, Item, Byte_IO);
807 end Wide_String_Write;
809 ------------------------------
810 -- Wide_String_Write_Blk_IO --
811 ------------------------------
813 procedure Wide_String_Write_Blk_IO
814 (Strm : access Ada.Streams.Root_Stream_Type'Class;
815 Item : Wide_String)
817 begin
818 Wide_String_Ops.Write (Strm, Item, Block_IO);
819 end Wide_String_Write_Blk_IO;
821 ----------------------------
822 -- Wide_Wide_String_Input --
823 ----------------------------
825 function Wide_Wide_String_Input
826 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Wide_Wide_String
828 begin
829 return Wide_Wide_String_Ops.Input (Strm, Byte_IO);
830 end Wide_Wide_String_Input;
832 -----------------------------------
833 -- Wide_Wide_String_Input_Blk_IO --
834 -----------------------------------
836 function Wide_Wide_String_Input_Blk_IO
837 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Wide_Wide_String
839 begin
840 return Wide_Wide_String_Ops.Input (Strm, Block_IO);
841 end Wide_Wide_String_Input_Blk_IO;
843 -----------------------------
844 -- Wide_Wide_String_Output --
845 -----------------------------
847 procedure Wide_Wide_String_Output
848 (Strm : access Ada.Streams.Root_Stream_Type'Class;
849 Item : Wide_Wide_String)
851 begin
852 Wide_Wide_String_Ops.Output (Strm, Item, Byte_IO);
853 end Wide_Wide_String_Output;
855 ------------------------------------
856 -- Wide_Wide_String_Output_Blk_IO --
857 ------------------------------------
859 procedure Wide_Wide_String_Output_Blk_IO
860 (Strm : access Ada.Streams.Root_Stream_Type'Class;
861 Item : Wide_Wide_String)
863 begin
864 Wide_Wide_String_Ops.Output (Strm, Item, Block_IO);
865 end Wide_Wide_String_Output_Blk_IO;
867 ---------------------------
868 -- Wide_Wide_String_Read --
869 ---------------------------
871 procedure Wide_Wide_String_Read
872 (Strm : access Ada.Streams.Root_Stream_Type'Class;
873 Item : out Wide_Wide_String)
875 begin
876 Wide_Wide_String_Ops.Read (Strm, Item, Byte_IO);
877 end Wide_Wide_String_Read;
879 ----------------------------------
880 -- Wide_Wide_String_Read_Blk_IO --
881 ----------------------------------
883 procedure Wide_Wide_String_Read_Blk_IO
884 (Strm : access Ada.Streams.Root_Stream_Type'Class;
885 Item : out Wide_Wide_String)
887 begin
888 Wide_Wide_String_Ops.Read (Strm, Item, Block_IO);
889 end Wide_Wide_String_Read_Blk_IO;
891 ----------------------------
892 -- Wide_Wide_String_Write --
893 ----------------------------
895 procedure Wide_Wide_String_Write
896 (Strm : access Ada.Streams.Root_Stream_Type'Class;
897 Item : Wide_Wide_String)
899 begin
900 Wide_Wide_String_Ops.Write (Strm, Item, Byte_IO);
901 end Wide_Wide_String_Write;
903 -----------------------------------
904 -- Wide_Wide_String_Write_Blk_IO --
905 -----------------------------------
907 procedure Wide_Wide_String_Write_Blk_IO
908 (Strm : access Ada.Streams.Root_Stream_Type'Class;
909 Item : Wide_Wide_String)
911 begin
912 Wide_Wide_String_Ops.Write (Strm, Item, Block_IO);
913 end Wide_Wide_String_Write_Blk_IO;
915 end System.Strings.Stream_Ops;