⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zlib-streams.adb

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -