1 ----------------------------------------------------------------
2 -- ZLib for Ada thick binding. --
4 -- Copyright (C) 2002-2003 Dmitriy Anisimkov --
6 -- Open source license information is in the zlib.ads file. --
7 ----------------------------------------------------------------
9 -- $Id: zlib-streams.ads,v 1.12 2004/05/31 10:53:40 vagul Exp $
11 package ZLib
.Streams
is
13 type Stream_Mode
is (In_Stream
, Out_Stream
, Duplex
);
15 type Stream_Access
is access all Ada
.Streams
.Root_Stream_Type
'Class;
18 new Ada
.Streams
.Root_Stream_Type
with private;
21 (Stream
: in out Stream_Type
;
22 Item
: out Ada
.Streams
.Stream_Element_Array
;
23 Last
: out Ada
.Streams
.Stream_Element_Offset
);
26 (Stream
: in out Stream_Type
;
27 Item
: in Ada
.Streams
.Stream_Element_Array
);
30 (Stream
: in out Stream_Type
;
31 Mode
: in Flush_Mode
:= Sync_Flush
);
32 -- Flush the written data to the back stream,
33 -- all data placed to the compressor is flushing to the Back stream.
34 -- Should not be used untill necessary, because it is decreasing
37 function Read_Total_In
(Stream
: in Stream_Type
) return Count
;
38 pragma Inline
(Read_Total_In
);
39 -- Return total number of bytes read from back stream so far.
41 function Read_Total_Out
(Stream
: in Stream_Type
) return Count
;
42 pragma Inline
(Read_Total_Out
);
43 -- Return total number of bytes read so far.
45 function Write_Total_In
(Stream
: in Stream_Type
) return Count
;
46 pragma Inline
(Write_Total_In
);
47 -- Return total number of bytes written so far.
49 function Write_Total_Out
(Stream
: in Stream_Type
) return Count
;
50 pragma Inline
(Write_Total_Out
);
51 -- Return total number of bytes written to the back stream.
54 (Stream
: out Stream_Type
;
55 Mode
: in Stream_Mode
;
56 Back
: in Stream_Access
;
57 Back_Compressed
: in Boolean;
58 Level
: in Compression_Level
:= Default_Compression
;
59 Strategy
: in Strategy_Type
:= Default_Strategy
;
60 Header
: in Header_Type
:= Default
;
61 Read_Buffer_Size
: in Ada
.Streams
.Stream_Element_Offset
62 := Default_Buffer_Size
;
63 Write_Buffer_Size
: in Ada
.Streams
.Stream_Element_Offset
64 := Default_Buffer_Size
);
65 -- Create the Comression/Decompression stream.
66 -- If mode is In_Stream then Write operation is disabled.
67 -- If mode is Out_Stream then Read operation is disabled.
69 -- If Back_Compressed is true then
70 -- Data written to the Stream is compressing to the Back stream
71 -- and data read from the Stream is decompressed data from the Back stream.
73 -- If Back_Compressed is false then
74 -- Data written to the Stream is decompressing to the Back stream
75 -- and data read from the Stream is compressed data from the Back stream.
77 -- !!! When the Need_Header is False ZLib-Ada is using undocumented
78 -- ZLib 1.1.4 functionality to do not create/wait for ZLib headers.
80 function Is_Open
(Stream
: Stream_Type
) return Boolean;
82 procedure Close
(Stream
: in out Stream_Type
);
88 type Buffer_Access
is access all Stream_Element_Array
;
91 is new Root_Stream_Type
with
95 Buffer
: Buffer_Access
;
96 Rest_First
: Stream_Element_Offset
;
97 Rest_Last
: Stream_Element_Offset
;
98 -- Buffer for Read operation.
99 -- We need to have this buffer in the record
100 -- because not all read data from back stream
101 -- could be processed during the read operation.
103 Buffer_Size
: Stream_Element_Offset
;
104 -- Buffer size for write operation.
105 -- We do not need to have this buffer
106 -- in the record because all data could be
107 -- processed in the write operation.
109 Back
: Stream_Access
;
110 Reader
: Filter_Type
;
111 Writer
: Filter_Type
;