|
1 ---------------------------------------------------------------- |
|
2 -- ZLib for Ada thick binding. -- |
|
3 -- -- |
|
4 -- Copyright (C) 2002-2003 Dmitriy Anisimkov -- |
|
5 -- -- |
|
6 -- Open source license information is in the zlib.ads file. -- |
|
7 ---------------------------------------------------------------- |
|
8 |
|
9 -- $Id: zlib-streams.ads,v 1.12 2004/05/31 10:53:40 vagul Exp $ |
|
10 |
|
11 package ZLib.Streams is |
|
12 |
|
13 type Stream_Mode is (In_Stream, Out_Stream, Duplex); |
|
14 |
|
15 type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class; |
|
16 |
|
17 type Stream_Type is |
|
18 new Ada.Streams.Root_Stream_Type with private; |
|
19 |
|
20 procedure Read |
|
21 (Stream : in out Stream_Type; |
|
22 Item : out Ada.Streams.Stream_Element_Array; |
|
23 Last : out Ada.Streams.Stream_Element_Offset); |
|
24 |
|
25 procedure Write |
|
26 (Stream : in out Stream_Type; |
|
27 Item : in Ada.Streams.Stream_Element_Array); |
|
28 |
|
29 procedure Flush |
|
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, becouse it is decreasing |
|
35 -- compression. |
|
36 |
|
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. |
|
40 |
|
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. |
|
44 |
|
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. |
|
48 |
|
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. |
|
52 |
|
53 procedure Create |
|
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. |
|
68 |
|
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. |
|
72 |
|
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. |
|
76 |
|
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. |
|
79 |
|
80 function Is_Open (Stream : Stream_Type) return Boolean; |
|
81 |
|
82 procedure Close (Stream : in out Stream_Type); |
|
83 |
|
84 private |
|
85 |
|
86 use Ada.Streams; |
|
87 |
|
88 type Buffer_Access is access all Stream_Element_Array; |
|
89 |
|
90 type Stream_Type |
|
91 is new Root_Stream_Type with |
|
92 record |
|
93 Mode : Stream_Mode; |
|
94 |
|
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 -- becouse not all read data from back stream |
|
101 -- could be processed during the read operation. |
|
102 |
|
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 becouse all data could be |
|
107 -- processed in the write operation. |
|
108 |
|
109 Back : Stream_Access; |
|
110 Reader : Filter_Type; |
|
111 Writer : Filter_Type; |
|
112 end record; |
|
113 |
|
114 end ZLib.Streams; |