9e052883 |
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 until necessary, because 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); |
648db22b |
65 | -- Create the Compression/Decompression stream. |
9e052883 |
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 | -- because 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 because 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; |