2016-10-26 François Dumont <fdumont@gcc.gnu.org>
[official-gcc.git] / gcc / ada / s-ststop.adb
blob612ed0c8ac11a89cf8661b99258a68df691ed0a6
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-2013, 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) return Array_Type;
64 procedure Output
65 (Strm : access Root_Stream_Type'Class;
66 Item : Array_Type;
67 IO : IO_Kind);
69 procedure Read
70 (Strm : access Root_Stream_Type'Class;
71 Item : out Array_Type;
72 IO : IO_Kind);
74 procedure Write
75 (Strm : access Root_Stream_Type'Class;
76 Item : Array_Type;
77 IO : IO_Kind);
78 end Stream_Ops_Internal;
80 -------------------------
81 -- Stream_Ops_Internal --
82 -------------------------
84 package body Stream_Ops_Internal is
86 -- The following value represents the number of BITS allocated for the
87 -- default block used in string IO. The sizes of all other types are
88 -- calculated relative to this value.
90 Default_Block_Size : constant := 512 * 8;
92 -- Shorthand notation for stream element and element type sizes
94 ET_Size : constant Integer := Element_Type'Size;
95 SE_Size : constant Integer := Stream_Element'Size;
97 -- The following constants describe the number of array elements or
98 -- stream elements that can fit into a default block.
100 AE_In_Default_Block : constant Index_Type :=
101 Index_Type (Default_Block_Size / ET_Size);
102 -- Number of array elements in a default block
104 SE_In_Default_Block : constant Integer := Default_Block_Size / SE_Size;
105 -- Number of storage elements in a default block
107 -- Buffer types
109 subtype Default_Block is Stream_Element_Array
110 (1 .. Stream_Element_Offset (SE_In_Default_Block));
112 subtype Array_Block is
113 Array_Type (Index_Type range 1 .. AE_In_Default_Block);
115 -- Conversions to and from Default_Block
117 function To_Default_Block is
118 new Ada.Unchecked_Conversion (Array_Block, Default_Block);
120 function To_Array_Block is
121 new Ada.Unchecked_Conversion (Default_Block, Array_Block);
123 -----------
124 -- Input --
125 -----------
127 function Input
128 (Strm : access Root_Stream_Type'Class;
129 IO : IO_Kind) return Array_Type
131 begin
132 if Strm = null then
133 raise Constraint_Error;
134 end if;
136 declare
137 Low : Index_Type;
138 High : Index_Type;
140 begin
141 -- Read the bounds of the string
143 Index_Type'Read (Strm, Low);
144 Index_Type'Read (Strm, High);
146 -- Read the character content of the string
148 declare
149 Item : Array_Type (Low .. High);
150 begin
151 Read (Strm, Item, IO);
152 return Item;
153 end;
154 end;
155 end Input;
157 ------------
158 -- Output --
159 ------------
161 procedure Output
162 (Strm : access Root_Stream_Type'Class;
163 Item : Array_Type;
164 IO : IO_Kind)
166 begin
167 if Strm = null then
168 raise Constraint_Error;
169 end if;
171 -- Write the bounds of the string
173 Index_Type'Write (Strm, Item'First);
174 Index_Type'Write (Strm, Item'Last);
176 -- Write the character content of the string
178 Write (Strm, Item, IO);
179 end Output;
181 ----------
182 -- Read --
183 ----------
185 procedure Read
186 (Strm : access Root_Stream_Type'Class;
187 Item : out Array_Type;
188 IO : IO_Kind)
190 begin
191 if Strm = null then
192 raise Constraint_Error;
193 end if;
195 -- Nothing to do if the desired string is empty
197 if Item'Length = 0 then
198 return;
199 end if;
201 -- Block IO
203 if IO = Block_IO and then Stream_Attributes.Block_IO_OK then
204 declare
205 -- Determine the size in BITS of the block necessary to contain
206 -- the whole string.
208 Block_Size : constant Natural :=
209 Integer (Item'Last - Item'First + 1) * ET_Size;
211 -- Item can be larger than what the default block can store,
212 -- determine the number of whole reads necessary to read the
213 -- string.
215 Blocks : constant Natural := Block_Size / Default_Block_Size;
217 -- The size of Item may not be a multiple of the default block
218 -- size, determine the size of the remaining chunk in BITS.
220 Rem_Size : constant Natural :=
221 Block_Size mod Default_Block_Size;
223 -- String indexes
225 Low : Index_Type := Item'First;
226 High : Index_Type := Low + AE_In_Default_Block - 1;
228 -- End of stream error detection
230 Last : Stream_Element_Offset := 0;
231 Sum : Stream_Element_Offset := 0;
233 begin
234 -- Step 1: If the string is too large, read in individual
235 -- chunks the size of the default block.
237 if Blocks > 0 then
238 declare
239 Block : Default_Block;
241 begin
242 for Counter in 1 .. Blocks loop
243 Read (Strm.all, Block, Last);
244 Item (Low .. High) := To_Array_Block (Block);
246 Low := High + 1;
247 High := Low + AE_In_Default_Block - 1;
248 Sum := Sum + Last;
249 Last := 0;
250 end loop;
251 end;
252 end if;
254 -- Step 2: Read in any remaining elements
256 if Rem_Size > 0 then
257 declare
258 subtype Rem_Block is Stream_Element_Array
259 (1 .. Stream_Element_Offset (Rem_Size / SE_Size));
261 subtype Rem_Array_Block is
262 Array_Type (Index_Type range
263 1 .. Index_Type (Rem_Size / ET_Size));
265 function To_Rem_Array_Block is new
266 Ada.Unchecked_Conversion (Rem_Block, Rem_Array_Block);
268 Block : Rem_Block;
270 begin
271 Read (Strm.all, Block, Last);
272 Item (Low .. Item'Last) := To_Rem_Array_Block (Block);
274 Sum := Sum + Last;
275 end;
276 end if;
278 -- Step 3: Potential error detection. The sum of all the
279 -- chunks is less than we initially wanted to read. In other
280 -- words, the stream does not contain enough elements to fully
281 -- populate Item.
283 if (Integer (Sum) * SE_Size) / ET_Size < Item'Length then
284 raise End_Error;
285 end if;
286 end;
288 -- Byte IO
290 else
291 declare
292 E : Element_Type;
293 begin
294 for Index in Item'First .. Item'Last loop
295 Element_Type'Read (Strm, E);
296 Item (Index) := E;
297 end loop;
298 end;
299 end if;
300 end Read;
302 -----------
303 -- Write --
304 -----------
306 procedure Write
307 (Strm : access Root_Stream_Type'Class;
308 Item : Array_Type;
309 IO : IO_Kind)
311 begin
312 if Strm = null then
313 raise Constraint_Error;
314 end if;
316 -- Nothing to do if the input string is empty
318 if Item'Length = 0 then
319 return;
320 end if;
322 -- Block IO
324 if IO = Block_IO and then Stream_Attributes.Block_IO_OK then
325 declare
326 -- Determine the size in BITS of the block necessary to contain
327 -- the whole string.
329 Block_Size : constant Natural := Item'Length * ET_Size;
331 -- Item can be larger than what the default block can store,
332 -- determine the number of whole writes necessary to output the
333 -- string.
335 Blocks : constant Natural := Block_Size / Default_Block_Size;
337 -- The size of Item may not be a multiple of the default block
338 -- size, determine the size of the remaining chunk.
340 Rem_Size : constant Natural :=
341 Block_Size mod Default_Block_Size;
343 -- String indexes
345 Low : Index_Type := Item'First;
346 High : Index_Type := Low + AE_In_Default_Block - 1;
348 begin
349 -- Step 1: If the string is too large, write out individual
350 -- chunks the size of the default block.
352 for Counter in 1 .. Blocks loop
353 Write (Strm.all, To_Default_Block (Item (Low .. High)));
354 Low := High + 1;
355 High := Low + AE_In_Default_Block - 1;
356 end loop;
358 -- Step 2: Write out any remaining elements
360 if Rem_Size > 0 then
361 declare
362 subtype Rem_Block is Stream_Element_Array
363 (1 .. Stream_Element_Offset (Rem_Size / SE_Size));
365 subtype Rem_Array_Block is
366 Array_Type (Index_Type range
367 1 .. Index_Type (Rem_Size / ET_Size));
369 function To_Rem_Block is new
370 Ada.Unchecked_Conversion (Rem_Array_Block, Rem_Block);
372 begin
373 Write (Strm.all, To_Rem_Block (Item (Low .. Item'Last)));
374 end;
375 end if;
376 end;
378 -- Byte IO
380 else
381 for Index in Item'First .. Item'Last loop
382 Element_Type'Write (Strm, Item (Index));
383 end loop;
384 end if;
385 end Write;
386 end Stream_Ops_Internal;
388 -- Specific instantiations for all Ada array types handled
390 package Storage_Array_Ops is
391 new Stream_Ops_Internal
392 (Element_Type => Storage_Element,
393 Index_Type => Storage_Offset,
394 Array_Type => Storage_Array);
396 package Stream_Element_Array_Ops is
397 new Stream_Ops_Internal
398 (Element_Type => Stream_Element,
399 Index_Type => Stream_Element_Offset,
400 Array_Type => Stream_Element_Array);
402 package String_Ops is
403 new Stream_Ops_Internal
404 (Element_Type => Character,
405 Index_Type => Positive,
406 Array_Type => String);
408 package Wide_String_Ops is
409 new Stream_Ops_Internal
410 (Element_Type => Wide_Character,
411 Index_Type => Positive,
412 Array_Type => Wide_String);
414 package Wide_Wide_String_Ops is
415 new Stream_Ops_Internal
416 (Element_Type => Wide_Wide_Character,
417 Index_Type => Positive,
418 Array_Type => Wide_Wide_String);
420 -------------------------
421 -- Storage_Array_Input --
422 -------------------------
424 function Storage_Array_Input
425 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Storage_Array
427 begin
428 return Storage_Array_Ops.Input (Strm, Byte_IO);
429 end Storage_Array_Input;
431 --------------------------------
432 -- Storage_Array_Input_Blk_IO --
433 --------------------------------
435 function Storage_Array_Input_Blk_IO
436 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Storage_Array
438 begin
439 return Storage_Array_Ops.Input (Strm, Block_IO);
440 end Storage_Array_Input_Blk_IO;
442 --------------------------
443 -- Storage_Array_Output --
444 --------------------------
446 procedure Storage_Array_Output
447 (Strm : access Ada.Streams.Root_Stream_Type'Class;
448 Item : Storage_Array)
450 begin
451 Storage_Array_Ops.Output (Strm, Item, Byte_IO);
452 end Storage_Array_Output;
454 ---------------------------------
455 -- Storage_Array_Output_Blk_IO --
456 ---------------------------------
458 procedure Storage_Array_Output_Blk_IO
459 (Strm : access Ada.Streams.Root_Stream_Type'Class;
460 Item : Storage_Array)
462 begin
463 Storage_Array_Ops.Output (Strm, Item, Block_IO);
464 end Storage_Array_Output_Blk_IO;
466 ------------------------
467 -- Storage_Array_Read --
468 ------------------------
470 procedure Storage_Array_Read
471 (Strm : access Ada.Streams.Root_Stream_Type'Class;
472 Item : out Storage_Array)
474 begin
475 Storage_Array_Ops.Read (Strm, Item, Byte_IO);
476 end Storage_Array_Read;
478 -------------------------------
479 -- Storage_Array_Read_Blk_IO --
480 -------------------------------
482 procedure Storage_Array_Read_Blk_IO
483 (Strm : access Ada.Streams.Root_Stream_Type'Class;
484 Item : out Storage_Array)
486 begin
487 Storage_Array_Ops.Read (Strm, Item, Block_IO);
488 end Storage_Array_Read_Blk_IO;
490 -------------------------
491 -- Storage_Array_Write --
492 -------------------------
494 procedure Storage_Array_Write
495 (Strm : access Ada.Streams.Root_Stream_Type'Class;
496 Item : Storage_Array)
498 begin
499 Storage_Array_Ops.Write (Strm, Item, Byte_IO);
500 end Storage_Array_Write;
502 --------------------------------
503 -- Storage_Array_Write_Blk_IO --
504 --------------------------------
506 procedure Storage_Array_Write_Blk_IO
507 (Strm : access Ada.Streams.Root_Stream_Type'Class;
508 Item : Storage_Array)
510 begin
511 Storage_Array_Ops.Write (Strm, Item, Block_IO);
512 end Storage_Array_Write_Blk_IO;
514 --------------------------------
515 -- Stream_Element_Array_Input --
516 --------------------------------
518 function Stream_Element_Array_Input
519 (Strm : access Ada.Streams.Root_Stream_Type'Class)
520 return Stream_Element_Array
522 begin
523 return Stream_Element_Array_Ops.Input (Strm, Byte_IO);
524 end Stream_Element_Array_Input;
526 ---------------------------------------
527 -- Stream_Element_Array_Input_Blk_IO --
528 ---------------------------------------
530 function Stream_Element_Array_Input_Blk_IO
531 (Strm : access Ada.Streams.Root_Stream_Type'Class)
532 return Stream_Element_Array
534 begin
535 return Stream_Element_Array_Ops.Input (Strm, Block_IO);
536 end Stream_Element_Array_Input_Blk_IO;
538 ---------------------------------
539 -- Stream_Element_Array_Output --
540 ---------------------------------
542 procedure Stream_Element_Array_Output
543 (Strm : access Ada.Streams.Root_Stream_Type'Class;
544 Item : Stream_Element_Array)
546 begin
547 Stream_Element_Array_Ops.Output (Strm, Item, Byte_IO);
548 end Stream_Element_Array_Output;
550 ----------------------------------------
551 -- Stream_Element_Array_Output_Blk_IO --
552 ----------------------------------------
554 procedure Stream_Element_Array_Output_Blk_IO
555 (Strm : access Ada.Streams.Root_Stream_Type'Class;
556 Item : Stream_Element_Array)
558 begin
559 Stream_Element_Array_Ops.Output (Strm, Item, Block_IO);
560 end Stream_Element_Array_Output_Blk_IO;
562 -------------------------------
563 -- Stream_Element_Array_Read --
564 -------------------------------
566 procedure Stream_Element_Array_Read
567 (Strm : access Ada.Streams.Root_Stream_Type'Class;
568 Item : out Stream_Element_Array)
570 begin
571 Stream_Element_Array_Ops.Read (Strm, Item, Byte_IO);
572 end Stream_Element_Array_Read;
574 --------------------------------------
575 -- Stream_Element_Array_Read_Blk_IO --
576 --------------------------------------
578 procedure Stream_Element_Array_Read_Blk_IO
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, Block_IO);
584 end Stream_Element_Array_Read_Blk_IO;
586 --------------------------------
587 -- Stream_Element_Array_Write --
588 --------------------------------
590 procedure Stream_Element_Array_Write
591 (Strm : access Ada.Streams.Root_Stream_Type'Class;
592 Item : Stream_Element_Array)
594 begin
595 Stream_Element_Array_Ops.Write (Strm, Item, Byte_IO);
596 end Stream_Element_Array_Write;
598 ---------------------------------------
599 -- Stream_Element_Array_Write_Blk_IO --
600 ---------------------------------------
602 procedure Stream_Element_Array_Write_Blk_IO
603 (Strm : access Ada.Streams.Root_Stream_Type'Class;
604 Item : Stream_Element_Array)
606 begin
607 Stream_Element_Array_Ops.Write (Strm, Item, Block_IO);
608 end Stream_Element_Array_Write_Blk_IO;
610 ------------------
611 -- String_Input --
612 ------------------
614 function String_Input
615 (Strm : access Ada.Streams.Root_Stream_Type'Class) return String
617 begin
618 return String_Ops.Input (Strm, Byte_IO);
619 end String_Input;
621 -------------------------
622 -- String_Input_Blk_IO --
623 -------------------------
625 function String_Input_Blk_IO
626 (Strm : access Ada.Streams.Root_Stream_Type'Class) return String
628 begin
629 return String_Ops.Input (Strm, Block_IO);
630 end String_Input_Blk_IO;
632 -------------------
633 -- String_Output --
634 -------------------
636 procedure String_Output
637 (Strm : access Ada.Streams.Root_Stream_Type'Class;
638 Item : String)
640 begin
641 String_Ops.Output (Strm, Item, Byte_IO);
642 end String_Output;
644 --------------------------
645 -- String_Output_Blk_IO --
646 --------------------------
648 procedure String_Output_Blk_IO
649 (Strm : access Ada.Streams.Root_Stream_Type'Class;
650 Item : String)
652 begin
653 String_Ops.Output (Strm, Item, Block_IO);
654 end String_Output_Blk_IO;
656 -----------------
657 -- String_Read --
658 -----------------
660 procedure String_Read
661 (Strm : access Ada.Streams.Root_Stream_Type'Class;
662 Item : out String)
664 begin
665 String_Ops.Read (Strm, Item, Byte_IO);
666 end String_Read;
668 ------------------------
669 -- String_Read_Blk_IO --
670 ------------------------
672 procedure String_Read_Blk_IO
673 (Strm : access Ada.Streams.Root_Stream_Type'Class;
674 Item : out String)
676 begin
677 String_Ops.Read (Strm, Item, Block_IO);
678 end String_Read_Blk_IO;
680 ------------------
681 -- String_Write --
682 ------------------
684 procedure String_Write
685 (Strm : access Ada.Streams.Root_Stream_Type'Class;
686 Item : String)
688 begin
689 String_Ops.Write (Strm, Item, Byte_IO);
690 end String_Write;
692 -------------------------
693 -- String_Write_Blk_IO --
694 -------------------------
696 procedure String_Write_Blk_IO
697 (Strm : access Ada.Streams.Root_Stream_Type'Class;
698 Item : String)
700 begin
701 String_Ops.Write (Strm, Item, Block_IO);
702 end String_Write_Blk_IO;
704 -----------------------
705 -- Wide_String_Input --
706 -----------------------
708 function Wide_String_Input
709 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Wide_String
711 begin
712 return Wide_String_Ops.Input (Strm, Byte_IO);
713 end Wide_String_Input;
715 ------------------------------
716 -- Wide_String_Input_Blk_IO --
717 ------------------------------
719 function Wide_String_Input_Blk_IO
720 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Wide_String
722 begin
723 return Wide_String_Ops.Input (Strm, Block_IO);
724 end Wide_String_Input_Blk_IO;
726 ------------------------
727 -- Wide_String_Output --
728 ------------------------
730 procedure Wide_String_Output
731 (Strm : access Ada.Streams.Root_Stream_Type'Class;
732 Item : Wide_String)
734 begin
735 Wide_String_Ops.Output (Strm, Item, Byte_IO);
736 end Wide_String_Output;
738 -------------------------------
739 -- Wide_String_Output_Blk_IO --
740 -------------------------------
742 procedure Wide_String_Output_Blk_IO
743 (Strm : access Ada.Streams.Root_Stream_Type'Class;
744 Item : Wide_String)
746 begin
747 Wide_String_Ops.Output (Strm, Item, Block_IO);
748 end Wide_String_Output_Blk_IO;
750 ----------------------
751 -- Wide_String_Read --
752 ----------------------
754 procedure Wide_String_Read
755 (Strm : access Ada.Streams.Root_Stream_Type'Class;
756 Item : out Wide_String)
758 begin
759 Wide_String_Ops.Read (Strm, Item, Byte_IO);
760 end Wide_String_Read;
762 -----------------------------
763 -- Wide_String_Read_Blk_IO --
764 -----------------------------
766 procedure Wide_String_Read_Blk_IO
767 (Strm : access Ada.Streams.Root_Stream_Type'Class;
768 Item : out Wide_String)
770 begin
771 Wide_String_Ops.Read (Strm, Item, Block_IO);
772 end Wide_String_Read_Blk_IO;
774 -----------------------
775 -- Wide_String_Write --
776 -----------------------
778 procedure Wide_String_Write
779 (Strm : access Ada.Streams.Root_Stream_Type'Class;
780 Item : Wide_String)
782 begin
783 Wide_String_Ops.Write (Strm, Item, Byte_IO);
784 end Wide_String_Write;
786 ------------------------------
787 -- Wide_String_Write_Blk_IO --
788 ------------------------------
790 procedure Wide_String_Write_Blk_IO
791 (Strm : access Ada.Streams.Root_Stream_Type'Class;
792 Item : Wide_String)
794 begin
795 Wide_String_Ops.Write (Strm, Item, Block_IO);
796 end Wide_String_Write_Blk_IO;
798 ----------------------------
799 -- Wide_Wide_String_Input --
800 ----------------------------
802 function Wide_Wide_String_Input
803 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Wide_Wide_String
805 begin
806 return Wide_Wide_String_Ops.Input (Strm, Byte_IO);
807 end Wide_Wide_String_Input;
809 -----------------------------------
810 -- Wide_Wide_String_Input_Blk_IO --
811 -----------------------------------
813 function Wide_Wide_String_Input_Blk_IO
814 (Strm : access Ada.Streams.Root_Stream_Type'Class) return Wide_Wide_String
816 begin
817 return Wide_Wide_String_Ops.Input (Strm, Block_IO);
818 end Wide_Wide_String_Input_Blk_IO;
820 -----------------------------
821 -- Wide_Wide_String_Output --
822 -----------------------------
824 procedure Wide_Wide_String_Output
825 (Strm : access Ada.Streams.Root_Stream_Type'Class;
826 Item : Wide_Wide_String)
828 begin
829 Wide_Wide_String_Ops.Output (Strm, Item, Byte_IO);
830 end Wide_Wide_String_Output;
832 ------------------------------------
833 -- Wide_Wide_String_Output_Blk_IO --
834 ------------------------------------
836 procedure Wide_Wide_String_Output_Blk_IO
837 (Strm : access Ada.Streams.Root_Stream_Type'Class;
838 Item : Wide_Wide_String)
840 begin
841 Wide_Wide_String_Ops.Output (Strm, Item, Block_IO);
842 end Wide_Wide_String_Output_Blk_IO;
844 ---------------------------
845 -- Wide_Wide_String_Read --
846 ---------------------------
848 procedure Wide_Wide_String_Read
849 (Strm : access Ada.Streams.Root_Stream_Type'Class;
850 Item : out Wide_Wide_String)
852 begin
853 Wide_Wide_String_Ops.Read (Strm, Item, Byte_IO);
854 end Wide_Wide_String_Read;
856 ----------------------------------
857 -- Wide_Wide_String_Read_Blk_IO --
858 ----------------------------------
860 procedure Wide_Wide_String_Read_Blk_IO
861 (Strm : access Ada.Streams.Root_Stream_Type'Class;
862 Item : out Wide_Wide_String)
864 begin
865 Wide_Wide_String_Ops.Read (Strm, Item, Block_IO);
866 end Wide_Wide_String_Read_Blk_IO;
868 ----------------------------
869 -- Wide_Wide_String_Write --
870 ----------------------------
872 procedure Wide_Wide_String_Write
873 (Strm : access Ada.Streams.Root_Stream_Type'Class;
874 Item : Wide_Wide_String)
876 begin
877 Wide_Wide_String_Ops.Write (Strm, Item, Byte_IO);
878 end Wide_Wide_String_Write;
880 -----------------------------------
881 -- Wide_Wide_String_Write_Blk_IO --
882 -----------------------------------
884 procedure Wide_Wide_String_Write_Blk_IO
885 (Strm : access Ada.Streams.Root_Stream_Type'Class;
886 Item : Wide_Wide_String)
888 begin
889 Wide_Wide_String_Ops.Write (Strm, Item, Block_IO);
890 end Wide_Wide_String_Write_Blk_IO;
892 end System.Strings.Stream_Ops;