1b33c96954667ba382fa595baf7b31290bfdd517vboxsync----------------------------------------------------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- ZLib for Ada thick binding. --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- Open source license information is in the zlib.ads file. --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync----------------------------------------------------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync-- $Id$
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncwith Ada.Unchecked_Deallocation;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncpackage body ZLib.Streams is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Close --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Close (Stream : in out Stream_Type) is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Free is new Ada.Unchecked_Deallocation
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Stream_Element_Array, Buffer_Access);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if Stream.Mode = Out_Stream or Stream.Mode = Duplex then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- We should flush the data written by the writer.
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Flush (Stream, Finish);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Close (Stream.Writer);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end if;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if Stream.Mode = In_Stream or Stream.Mode = Duplex then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Close (Stream.Reader);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Free (Stream.Buffer);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end if;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Close;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Create --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Create
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Stream : out Stream_Type;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Mode : in Stream_Mode;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Back : in Stream_Access;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Back_Compressed : in Boolean;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Level : in Compression_Level := Default_Compression;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Strategy : in Strategy_Type := Default_Strategy;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Header : in Header_Type := Default;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Read_Buffer_Size : in Ada.Streams.Stream_Element_Offset
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync := Default_Buffer_Size;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync := Default_Buffer_Size)
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Init_Filter
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Filter : in out Filter_Type;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Compress : in Boolean);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Init_Filter --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Init_Filter
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Filter : in out Filter_Type;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Compress : in Boolean) is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if Compress then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Deflate_Init
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Filter, Level, Strategy, Header => Header);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync else
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Inflate_Init (Filter, Header => Header);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end if;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Init_Filter;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Stream.Back := Back;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Stream.Mode := Mode;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if Mode = Out_Stream or Mode = Duplex then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Init_Filter (Stream.Writer, Back_Compressed);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Stream.Buffer_Size := Write_Buffer_Size;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync else
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Stream.Buffer_Size := 0;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end if;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync if Mode = In_Stream or Mode = Duplex then
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Init_Filter (Stream.Reader, not Back_Compressed);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Stream.Buffer := new Buffer_Subtype;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Stream.Rest_First := Stream.Buffer'Last + 1;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Stream.Rest_Last := Stream.Buffer'Last;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end if;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Create;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Flush --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Flush
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Stream : in out Stream_Type;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Mode : in Flush_Mode := Sync_Flush)
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Last : Stream_Element_Offset;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync loop
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Flush (Stream.Writer, Buffer, Last, Mode);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last));
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync exit when Last < Buffer'Last;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end loop;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Flush;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Is_Open --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync function Is_Open (Stream : Stream_Type) return Boolean is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync return Is_Open (Stream.Reader) or else Is_Open (Stream.Writer);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Is_Open;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Read --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Read
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Stream : in out Stream_Type;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Item : out Stream_Element_Array;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Last : out Stream_Element_Offset)
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Read
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Item : out Stream_Element_Array;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Last : out Stream_Element_Offset);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Read --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Read
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Item : out Stream_Element_Array;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Last : out Stream_Element_Offset) is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Ada.Streams.Read (Stream.Back.all, Item, Last);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Read;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Read is new ZLib.Read
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Read => Read,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Buffer => Stream.Buffer.all,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Rest_First => Stream.Rest_First,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Rest_Last => Stream.Rest_Last);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Read (Stream.Reader, Item, Last);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Read;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Read_Total_In --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync function Read_Total_In (Stream : in Stream_Type) return Count is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync return Total_In (Stream.Reader);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Read_Total_In;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync --------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Read_Total_Out --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync --------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync function Read_Total_Out (Stream : in Stream_Type) return Count is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync return Total_Out (Stream.Reader);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Read_Total_Out;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Write --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Write
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Stream : in out Stream_Type;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Item : in Stream_Element_Array)
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Write (Item : in Stream_Element_Array);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Write --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -----------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Write (Item : in Stream_Element_Array) is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Ada.Streams.Write (Stream.Back.all, Item);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Write;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync procedure Write is new ZLib.Write
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync (Write => Write,
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Buffer_Size => Stream.Buffer_Size);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync Write (Stream.Writer, Item, No_Flush);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Write;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync --------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Write_Total_In --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync --------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync function Write_Total_In (Stream : in Stream_Type) return Count is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync return Total_In (Stream.Writer);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Write_Total_In;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ---------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync -- Write_Total_Out --
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync ---------------------
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync function Write_Total_Out (Stream : in Stream_Type) return Count is
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync begin
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync return Total_Out (Stream.Writer);
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync end Write_Total_Out;
1b33c96954667ba382fa595baf7b31290bfdd517vboxsync
1b33c96954667ba382fa595baf7b31290bfdd517vboxsyncend ZLib.Streams;