1 ------------------------------------------------------------------------------
3 -- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
5 -- S Y S T E M . S T R I N G S . S T R E A M _ O P S --
9 -- Copyright (C) 2008-2017, Free Software Foundation, Inc. --
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. --
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. --
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/>. --
27 -- GNAT was originally developed by the GNAT team at New York University. --
28 -- Extensive contributions were provided by Ada Core Technologies Inc. --
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.
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
61 (Strm
: access Root_Stream_Type
'Class;
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.
68 (Strm
: access Root_Stream_Type
'Class;
73 (Strm
: access Root_Stream_Type
'Class;
74 Item
: out Array_Type
;
78 (Strm
: access Root_Stream_Type
'Class;
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
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
);
131 (Strm
: access Root_Stream_Type
'Class;
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
142 raise Constraint_Error
;
146 Low
, High
: Index_Type
'Base;
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
;
158 -- Read the character content of the string
161 Item
: Array_Type
(Low
.. High
);
163 Read
(Strm
, Item
, IO
);
174 (Strm
: access Root_Stream_Type
'Class;
180 raise Constraint_Error
;
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
);
198 (Strm
: access Root_Stream_Type
'Class;
199 Item
: out Array_Type
;
204 raise Constraint_Error
;
207 -- Nothing to do if the desired string is empty
209 if Item
'Length = 0 then
215 if IO
= Block_IO
and then Stream_Attributes
.Block_IO_OK
then
217 -- Determine the size in BITS of the block necessary to contain
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
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
;
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;
246 -- Step 1: If the string is too large, read in individual
247 -- chunks the size of the default block.
251 Block
: Default_Block
;
254 for Counter
in 1 .. Blocks
loop
255 Read
(Strm
.all, Block
, Last
);
256 Item
(Low
.. High
) := To_Array_Block
(Block
);
259 High
:= Low
+ AE_In_Default_Block
- 1;
266 -- Step 2: Read in any remaining elements
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
);
283 Read
(Strm
.all, Block
, Last
);
284 Item
(Low
.. Item
'Last) := To_Rem_Array_Block
(Block
);
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
295 if (Integer (Sum
) * SE_Size
) / ET_Size
< Item
'Length then
306 for Index
in Item
'First .. Item
'Last loop
307 Element_Type
'Read (Strm
, E
);
319 (Strm
: access Root_Stream_Type
'Class;
325 raise Constraint_Error
;
328 -- Nothing to do if the input string is empty
330 if Item
'Length = 0 then
336 if IO
= Block_IO
and then Stream_Attributes
.Block_IO_OK
then
338 -- Determine the size in BITS of the block necessary to contain
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
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
;
357 Low
: Index_Type
:= Item
'First;
358 High
: Index_Type
:= Low
+ AE_In_Default_Block
- 1;
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
)));
367 High
:= Low
+ AE_In_Default_Block
- 1;
370 -- Step 2: Write out any remaining elements
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
);
385 Write
(Strm
.all, To_Rem_Block
(Item
(Low
.. Item
'Last)));
393 for Index
in Item
'First .. Item
'Last loop
394 Element_Type
'Write (Strm
, Item
(Index
));
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
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
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
)
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
)
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
)
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
)
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
)
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
)
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
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
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
)
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
)
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
)
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
)
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
)
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
)
619 Stream_Element_Array_Ops
.Write
(Strm
, Item
, Block_IO
);
620 end Stream_Element_Array_Write_Blk_IO
;
626 function String_Input
627 (Strm
: access Ada
.Streams
.Root_Stream_Type
'Class) return String
630 return String_Ops
.Input
(Strm
, Byte_IO
);
633 -------------------------
634 -- String_Input_Blk_IO --
635 -------------------------
637 function String_Input_Blk_IO
638 (Strm
: access Ada
.Streams
.Root_Stream_Type
'Class) return String
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
652 return String_Ops
.Input
(Strm
, Block_IO
, Max_Length
=> 10_000
);
653 end String_Input_Tag
;
659 procedure String_Output
660 (Strm
: access Ada
.Streams
.Root_Stream_Type
'Class;
664 String_Ops
.Output
(Strm
, Item
, Byte_IO
);
667 --------------------------
668 -- String_Output_Blk_IO --
669 --------------------------
671 procedure String_Output_Blk_IO
672 (Strm
: access Ada
.Streams
.Root_Stream_Type
'Class;
676 String_Ops
.Output
(Strm
, Item
, Block_IO
);
677 end String_Output_Blk_IO
;
683 procedure String_Read
684 (Strm
: access Ada
.Streams
.Root_Stream_Type
'Class;
688 String_Ops
.Read
(Strm
, Item
, Byte_IO
);
691 ------------------------
692 -- String_Read_Blk_IO --
693 ------------------------
695 procedure String_Read_Blk_IO
696 (Strm
: access Ada
.Streams
.Root_Stream_Type
'Class;
700 String_Ops
.Read
(Strm
, Item
, Block_IO
);
701 end String_Read_Blk_IO
;
707 procedure String_Write
708 (Strm
: access Ada
.Streams
.Root_Stream_Type
'Class;
712 String_Ops
.Write
(Strm
, Item
, Byte_IO
);
715 -------------------------
716 -- String_Write_Blk_IO --
717 -------------------------
719 procedure String_Write_Blk_IO
720 (Strm
: access Ada
.Streams
.Root_Stream_Type
'Class;
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
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
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;
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;
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)
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)
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;
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;
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
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
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
)
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
)
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
)
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
)
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
)
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
)
912 Wide_Wide_String_Ops
.Write
(Strm
, Item
, Block_IO
);
913 end Wide_Wide_String_Write_Blk_IO
;
915 end System
.Strings
.Stream_Ops
;