1
----------------------------------------------------------------
2
----------------------------------------------------------------
5
with Ada.Unchecked_Deallocation;
7
package body ZLib.Streams is
13
procedure Close (Stream : in out Stream_Type) is
14
procedure Free is new Ada.Unchecked_Deallocation
15
(Stream_Element_Array, Buffer_Access);
17
if Stream.Mode = Out_Stream or Stream.Mode = Duplex then
18
-- We should flush the data written by the writer.
20
Flush (Stream, Finish);
22
Close (Stream.Writer);
25
if Stream.Mode = In_Stream or Stream.Mode = Duplex then
26
Close (Stream.Reader);
36
(Stream : out Stream_Type;
37
Mode : in Stream_Mode;
38
Back : in Stream_Access;
39
Back_Compressed : in Boolean;
40
Level : in Compression_Level := Default_Compression;
41
Strategy : in Strategy_Type := Default_Strategy;
42
Header : in Header_Type := Default;
43
Read_Buffer_Size : in Ada.Streams.Stream_Element_Offset
44
:= Default_Buffer_Size;
45
Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset
46
:= Default_Buffer_Size)
49
subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size);
52
(Filter : in out Filter_Type;
53
Compress : in Boolean);
60
(Filter : in out Filter_Type;
61
Compress : in Boolean) is
65
(Filter, Level, Strategy, Header => Header);
67
Inflate_Init (Filter, Header => Header);
75
if Mode = Out_Stream or Mode = Duplex then
76
Init_Filter (Stream.Writer, Back_Compressed);
77
Stream.Buffer_Size := Write_Buffer_Size;
79
Stream.Buffer_Size := 0;
82
if Mode = In_Stream or Mode = Duplex then
83
Init_Filter (Stream.Reader, not Back_Compressed);
85
Stream.Buffer := new Buffer_Subtype;
86
Stream.Rest_First := Stream.Buffer'Last + 1;
87
Stream.Rest_Last := Stream.Buffer'Last;
96
(Stream : in out Stream_Type;
97
Mode : in Flush_Mode := Sync_Flush)
99
Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size);
100
Last : Stream_Element_Offset;
103
Flush (Stream.Writer, Buffer, Last, Mode);
105
Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last));
107
exit when Last < Buffer'Last;
115
function Is_Open (Stream : Stream_Type) return Boolean is
117
return Is_Open (Stream.Reader) or else Is_Open (Stream.Writer);
125
(Stream : in out Stream_Type;
126
Item : out Stream_Element_Array;
127
Last : out Stream_Element_Offset)
131
(Item : out Stream_Element_Array;
132
Last : out Stream_Element_Offset);
139
(Item : out Stream_Element_Array;
140
Last : out Stream_Element_Offset) is
142
Ada.Streams.Read (Stream.Back.all, Item, Last);
145
procedure Read is new ZLib.Read
147
Buffer => Stream.Buffer.all,
148
Rest_First => Stream.Rest_First,
149
Rest_Last => Stream.Rest_Last);
152
Read (Stream.Reader, Item, Last);
159
function Read_Total_In (Stream : in Stream_Type) return Count is
161
return Total_In (Stream.Reader);
168
function Read_Total_Out (Stream : in Stream_Type) return Count is
170
return Total_Out (Stream.Reader);
178
(Stream : in out Stream_Type;
179
Item : in Stream_Element_Array)
182
procedure Write (Item : in Stream_Element_Array);
188
procedure Write (Item : in Stream_Element_Array) is
190
Ada.Streams.Write (Stream.Back.all, Item);
193
procedure Write is new ZLib.Write
195
Buffer_Size => Stream.Buffer_Size);
198
Write (Stream.Writer, Item, No_Flush);
205
function Write_Total_In (Stream : in Stream_Type) return Count is
207
return Total_In (Stream.Writer);
210
---------------------
211
-- Write_Total_Out --
212
---------------------
214
function Write_Total_Out (Stream : in Stream_Type) return Count is
216
return Total_Out (Stream.Writer);