blob: c43c1bfdf049dcc0acbd5c0388b0d93007d873b8 [file] [log] [blame]
with Ada.Streams; use Ada.Streams;
package body Opt41_Pkg is
type Wstream is new Root_Stream_Type with record
S : Unbounded_String;
end record;
procedure Read (Stream : in out Wstream;
Item : out Stream_Element_Array;
Last : out Stream_Element_Offset) is null;
procedure Write (Stream : in out Wstream; Item : Stream_Element_Array) is
begin
for J in Item'Range loop
Append (Stream.S, Character'Val (Item (J)));
end loop;
end Write;
function Rec_Write (R : Rec) return Unbounded_String is
S : aliased Wstream;
begin
Rec'Output (S'Access, R);
return S.S;
end Rec_Write;
type Rstream is new Root_Stream_Type with record
S : String_Access;
Idx : Integer := 1;
end record;
procedure Write (Stream : in out Rstream; Item : Stream_Element_Array) is null;
procedure Read (Stream : in out Rstream;
Item : out Stream_Element_Array;
Last : out Stream_Element_Offset) is
begin
Last := Stream_Element_Offset'Min
(Item'Last, Item'First + Stream_Element_Offset (Stream.S'Last - Stream.Idx));
for I in Item'First .. Last loop
Item (I) := Stream_Element (Character'Pos (Stream.S (Stream.Idx)));
Stream.Idx := Stream.Idx + 1;
end loop;
end Read;
function Rec_Read (Str : String_Access) return Rec is
S : aliased Rstream;
begin
S.S := Str;
return Rec'Input (S'Access);
end Rec_Read;
end Opt41_Pkg;