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 40354 2012-03-05 13:39:00Z vboxsync $
|
---|
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;
|
---|