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