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;