xref: /minix3/common/dist/zlib/contrib/ada/zlib-streams.ads (revision 44bedb31d842b4b0444105519bcf929a69fe2dc1)
1*44bedb31SLionel Sambuc----------------------------------------------------------------
2*44bedb31SLionel Sambuc--  ZLib for Ada thick binding.                               --
3*44bedb31SLionel Sambuc--                                                            --
4*44bedb31SLionel Sambuc--  Copyright (C) 2002-2003 Dmitriy Anisimkov                 --
5*44bedb31SLionel Sambuc--                                                            --
6*44bedb31SLionel Sambuc--  Open source license information is in the zlib.ads file.  --
7*44bedb31SLionel Sambuc----------------------------------------------------------------
8*44bedb31SLionel Sambuc
9*44bedb31SLionel Sambuc--  Id: zlib-streams.ads,v 1.12 2004/05/31 10:53:40 vagul Exp
10*44bedb31SLionel Sambuc
11*44bedb31SLionel Sambucpackage ZLib.Streams is
12*44bedb31SLionel Sambuc
13*44bedb31SLionel Sambuc   type Stream_Mode is (In_Stream, Out_Stream, Duplex);
14*44bedb31SLionel Sambuc
15*44bedb31SLionel Sambuc   type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class;
16*44bedb31SLionel Sambuc
17*44bedb31SLionel Sambuc   type Stream_Type is
18*44bedb31SLionel Sambuc      new Ada.Streams.Root_Stream_Type with private;
19*44bedb31SLionel Sambuc
20*44bedb31SLionel Sambuc   procedure Read
21*44bedb31SLionel Sambuc     (Stream : in out Stream_Type;
22*44bedb31SLionel Sambuc      Item   :    out Ada.Streams.Stream_Element_Array;
23*44bedb31SLionel Sambuc      Last   :    out Ada.Streams.Stream_Element_Offset);
24*44bedb31SLionel Sambuc
25*44bedb31SLionel Sambuc   procedure Write
26*44bedb31SLionel Sambuc     (Stream : in out Stream_Type;
27*44bedb31SLionel Sambuc      Item   : in     Ada.Streams.Stream_Element_Array);
28*44bedb31SLionel Sambuc
29*44bedb31SLionel Sambuc   procedure Flush
30*44bedb31SLionel Sambuc     (Stream : in out Stream_Type;
31*44bedb31SLionel Sambuc      Mode   : in     Flush_Mode := Sync_Flush);
32*44bedb31SLionel Sambuc   --  Flush the written data to the back stream,
33*44bedb31SLionel Sambuc   --  all data placed to the compressor is flushing to the Back stream.
34*44bedb31SLionel Sambuc   --  Should not be used untill necessary, becouse it is decreasing
35*44bedb31SLionel Sambuc   --  compression.
36*44bedb31SLionel Sambuc
37*44bedb31SLionel Sambuc   function Read_Total_In (Stream : in Stream_Type) return Count;
38*44bedb31SLionel Sambuc   pragma Inline (Read_Total_In);
39*44bedb31SLionel Sambuc   --  Return total number of bytes read from back stream so far.
40*44bedb31SLionel Sambuc
41*44bedb31SLionel Sambuc   function Read_Total_Out (Stream : in Stream_Type) return Count;
42*44bedb31SLionel Sambuc   pragma Inline (Read_Total_Out);
43*44bedb31SLionel Sambuc   --  Return total number of bytes read so far.
44*44bedb31SLionel Sambuc
45*44bedb31SLionel Sambuc   function Write_Total_In (Stream : in Stream_Type) return Count;
46*44bedb31SLionel Sambuc   pragma Inline (Write_Total_In);
47*44bedb31SLionel Sambuc   --  Return total number of bytes written so far.
48*44bedb31SLionel Sambuc
49*44bedb31SLionel Sambuc   function Write_Total_Out (Stream : in Stream_Type) return Count;
50*44bedb31SLionel Sambuc   pragma Inline (Write_Total_Out);
51*44bedb31SLionel Sambuc   --  Return total number of bytes written to the back stream.
52*44bedb31SLionel Sambuc
53*44bedb31SLionel Sambuc   procedure Create
54*44bedb31SLionel Sambuc     (Stream            :    out Stream_Type;
55*44bedb31SLionel Sambuc      Mode              : in     Stream_Mode;
56*44bedb31SLionel Sambuc      Back              : in     Stream_Access;
57*44bedb31SLionel Sambuc      Back_Compressed   : in     Boolean;
58*44bedb31SLionel Sambuc      Level             : in     Compression_Level := Default_Compression;
59*44bedb31SLionel Sambuc      Strategy          : in     Strategy_Type     := Default_Strategy;
60*44bedb31SLionel Sambuc      Header            : in     Header_Type       := Default;
61*44bedb31SLionel Sambuc      Read_Buffer_Size  : in     Ada.Streams.Stream_Element_Offset
62*44bedb31SLionel Sambuc                                    := Default_Buffer_Size;
63*44bedb31SLionel Sambuc      Write_Buffer_Size : in     Ada.Streams.Stream_Element_Offset
64*44bedb31SLionel Sambuc                                    := Default_Buffer_Size);
65*44bedb31SLionel Sambuc   --  Create the Comression/Decompression stream.
66*44bedb31SLionel Sambuc   --  If mode is In_Stream then Write operation is disabled.
67*44bedb31SLionel Sambuc   --  If mode is Out_Stream then Read operation is disabled.
68*44bedb31SLionel Sambuc
69*44bedb31SLionel Sambuc   --  If Back_Compressed is true then
70*44bedb31SLionel Sambuc   --  Data written to the Stream is compressing to the Back stream
71*44bedb31SLionel Sambuc   --  and data read from the Stream is decompressed data from the Back stream.
72*44bedb31SLionel Sambuc
73*44bedb31SLionel Sambuc   --  If Back_Compressed is false then
74*44bedb31SLionel Sambuc   --  Data written to the Stream is decompressing to the Back stream
75*44bedb31SLionel Sambuc   --  and data read from the Stream is compressed data from the Back stream.
76*44bedb31SLionel Sambuc
77*44bedb31SLionel Sambuc   --  !!! When the Need_Header is False ZLib-Ada is using undocumented
78*44bedb31SLionel Sambuc   --  ZLib 1.1.4 functionality to do not create/wait for ZLib headers.
79*44bedb31SLionel Sambuc
80*44bedb31SLionel Sambuc   function Is_Open (Stream : Stream_Type) return Boolean;
81*44bedb31SLionel Sambuc
82*44bedb31SLionel Sambuc   procedure Close (Stream : in out Stream_Type);
83*44bedb31SLionel Sambuc
84*44bedb31SLionel Sambucprivate
85*44bedb31SLionel Sambuc
86*44bedb31SLionel Sambuc   use Ada.Streams;
87*44bedb31SLionel Sambuc
88*44bedb31SLionel Sambuc   type Buffer_Access is access all Stream_Element_Array;
89*44bedb31SLionel Sambuc
90*44bedb31SLionel Sambuc   type Stream_Type
91*44bedb31SLionel Sambuc     is new Root_Stream_Type with
92*44bedb31SLionel Sambuc   record
93*44bedb31SLionel Sambuc      Mode       : Stream_Mode;
94*44bedb31SLionel Sambuc
95*44bedb31SLionel Sambuc      Buffer     : Buffer_Access;
96*44bedb31SLionel Sambuc      Rest_First : Stream_Element_Offset;
97*44bedb31SLionel Sambuc      Rest_Last  : Stream_Element_Offset;
98*44bedb31SLionel Sambuc      --  Buffer for Read operation.
99*44bedb31SLionel Sambuc      --  We need to have this buffer in the record
100*44bedb31SLionel Sambuc      --  becouse not all read data from back stream
101*44bedb31SLionel Sambuc      --  could be processed during the read operation.
102*44bedb31SLionel Sambuc
103*44bedb31SLionel Sambuc      Buffer_Size : Stream_Element_Offset;
104*44bedb31SLionel Sambuc      --  Buffer size for write operation.
105*44bedb31SLionel Sambuc      --  We do not need to have this buffer
106*44bedb31SLionel Sambuc      --  in the record becouse all data could be
107*44bedb31SLionel Sambuc      --  processed in the write operation.
108*44bedb31SLionel Sambuc
109*44bedb31SLionel Sambuc      Back       : Stream_Access;
110*44bedb31SLionel Sambuc      Reader     : Filter_Type;
111*44bedb31SLionel Sambuc      Writer     : Filter_Type;
112*44bedb31SLionel Sambuc   end record;
113*44bedb31SLionel Sambuc
114*44bedb31SLionel Sambucend ZLib.Streams;
115