with Ada.Unchecked_Deallocation;
package Zip_Streams.Array_Streams is
type A_SEA is access all Stream_Element_Array;
procedure Delete is new Ada.Unchecked_Deallocation( Stream_Element_Array, A_SEA );
type Array_Stream is new Root_Zipstream_Type with private;
type A_Array_Stream is access all Array_Stream'Class;
procedure Set( Str : in out Array_Stream; Buf : in out A_SEA );
procedure Close( Str : in out Array_Stream );
procedure Delete( Str : in out A_Array_Stream );
Out_Of_Bounds,
Null_Stream,
Stream_Overflow : exception;
private
type Array_Stream is new Root_Zipstream_Type with
record
Buf : A_SEA := null;
Loc : Stream_Element_Offset := 1;
ModificationTime : Time := Calendar.Convert(Ada.Calendar.Clock);
end record;
procedure Read( Stream : in out Array_Stream;
Item : out Stream_Element_Array;
Last : out Stream_Element_Offset );
procedure Write( Stream : in out Array_Stream;
Item : Stream_Element_Array );
procedure Set_Index( S : access Array_Stream; To : Positive );
function Index( S : access Array_Stream ) return Integer;
function Size( S : access Array_Stream ) return Integer;
procedure SetTime( S : access Array_Stream;
ModificationTime : Time );
function GetTime( S : access Array_Stream ) return Time;
function End_Of_Stream( S : access Array_Stream ) return Boolean;
end Zip_Streams.Array_Streams;