f0193c6baeea5e0ca4c6f70129642149403c606a
[ira/wip.git] / lib / zlib / contrib / ada / zlib-streams.ads
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;