annotate src/zlib-1.2.7/contrib/ada/zlib-streams.adb @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents e13257ea84a4
children
rev   line source
Chris@4 1 ----------------------------------------------------------------
Chris@4 2 -- ZLib for Ada thick binding. --
Chris@4 3 -- --
Chris@4 4 -- Copyright (C) 2002-2003 Dmitriy Anisimkov --
Chris@4 5 -- --
Chris@4 6 -- Open source license information is in the zlib.ads file. --
Chris@4 7 ----------------------------------------------------------------
Chris@4 8
Chris@4 9 -- $Id: zlib-streams.adb,v 1.10 2004/05/31 10:53:40 vagul Exp $
Chris@4 10
Chris@4 11 with Ada.Unchecked_Deallocation;
Chris@4 12
Chris@4 13 package body ZLib.Streams is
Chris@4 14
Chris@4 15 -----------
Chris@4 16 -- Close --
Chris@4 17 -----------
Chris@4 18
Chris@4 19 procedure Close (Stream : in out Stream_Type) is
Chris@4 20 procedure Free is new Ada.Unchecked_Deallocation
Chris@4 21 (Stream_Element_Array, Buffer_Access);
Chris@4 22 begin
Chris@4 23 if Stream.Mode = Out_Stream or Stream.Mode = Duplex then
Chris@4 24 -- We should flush the data written by the writer.
Chris@4 25
Chris@4 26 Flush (Stream, Finish);
Chris@4 27
Chris@4 28 Close (Stream.Writer);
Chris@4 29 end if;
Chris@4 30
Chris@4 31 if Stream.Mode = In_Stream or Stream.Mode = Duplex then
Chris@4 32 Close (Stream.Reader);
Chris@4 33 Free (Stream.Buffer);
Chris@4 34 end if;
Chris@4 35 end Close;
Chris@4 36
Chris@4 37 ------------
Chris@4 38 -- Create --
Chris@4 39 ------------
Chris@4 40
Chris@4 41 procedure Create
Chris@4 42 (Stream : out Stream_Type;
Chris@4 43 Mode : in Stream_Mode;
Chris@4 44 Back : in Stream_Access;
Chris@4 45 Back_Compressed : in Boolean;
Chris@4 46 Level : in Compression_Level := Default_Compression;
Chris@4 47 Strategy : in Strategy_Type := Default_Strategy;
Chris@4 48 Header : in Header_Type := Default;
Chris@4 49 Read_Buffer_Size : in Ada.Streams.Stream_Element_Offset
Chris@4 50 := Default_Buffer_Size;
Chris@4 51 Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset
Chris@4 52 := Default_Buffer_Size)
Chris@4 53 is
Chris@4 54
Chris@4 55 subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size);
Chris@4 56
Chris@4 57 procedure Init_Filter
Chris@4 58 (Filter : in out Filter_Type;
Chris@4 59 Compress : in Boolean);
Chris@4 60
Chris@4 61 -----------------
Chris@4 62 -- Init_Filter --
Chris@4 63 -----------------
Chris@4 64
Chris@4 65 procedure Init_Filter
Chris@4 66 (Filter : in out Filter_Type;
Chris@4 67 Compress : in Boolean) is
Chris@4 68 begin
Chris@4 69 if Compress then
Chris@4 70 Deflate_Init
Chris@4 71 (Filter, Level, Strategy, Header => Header);
Chris@4 72 else
Chris@4 73 Inflate_Init (Filter, Header => Header);
Chris@4 74 end if;
Chris@4 75 end Init_Filter;
Chris@4 76
Chris@4 77 begin
Chris@4 78 Stream.Back := Back;
Chris@4 79 Stream.Mode := Mode;
Chris@4 80
Chris@4 81 if Mode = Out_Stream or Mode = Duplex then
Chris@4 82 Init_Filter (Stream.Writer, Back_Compressed);
Chris@4 83 Stream.Buffer_Size := Write_Buffer_Size;
Chris@4 84 else
Chris@4 85 Stream.Buffer_Size := 0;
Chris@4 86 end if;
Chris@4 87
Chris@4 88 if Mode = In_Stream or Mode = Duplex then
Chris@4 89 Init_Filter (Stream.Reader, not Back_Compressed);
Chris@4 90
Chris@4 91 Stream.Buffer := new Buffer_Subtype;
Chris@4 92 Stream.Rest_First := Stream.Buffer'Last + 1;
Chris@4 93 Stream.Rest_Last := Stream.Buffer'Last;
Chris@4 94 end if;
Chris@4 95 end Create;
Chris@4 96
Chris@4 97 -----------
Chris@4 98 -- Flush --
Chris@4 99 -----------
Chris@4 100
Chris@4 101 procedure Flush
Chris@4 102 (Stream : in out Stream_Type;
Chris@4 103 Mode : in Flush_Mode := Sync_Flush)
Chris@4 104 is
Chris@4 105 Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size);
Chris@4 106 Last : Stream_Element_Offset;
Chris@4 107 begin
Chris@4 108 loop
Chris@4 109 Flush (Stream.Writer, Buffer, Last, Mode);
Chris@4 110
Chris@4 111 Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last));
Chris@4 112
Chris@4 113 exit when Last < Buffer'Last;
Chris@4 114 end loop;
Chris@4 115 end Flush;
Chris@4 116
Chris@4 117 -------------
Chris@4 118 -- Is_Open --
Chris@4 119 -------------
Chris@4 120
Chris@4 121 function Is_Open (Stream : Stream_Type) return Boolean is
Chris@4 122 begin
Chris@4 123 return Is_Open (Stream.Reader) or else Is_Open (Stream.Writer);
Chris@4 124 end Is_Open;
Chris@4 125
Chris@4 126 ----------
Chris@4 127 -- Read --
Chris@4 128 ----------
Chris@4 129
Chris@4 130 procedure Read
Chris@4 131 (Stream : in out Stream_Type;
Chris@4 132 Item : out Stream_Element_Array;
Chris@4 133 Last : out Stream_Element_Offset)
Chris@4 134 is
Chris@4 135
Chris@4 136 procedure Read
Chris@4 137 (Item : out Stream_Element_Array;
Chris@4 138 Last : out Stream_Element_Offset);
Chris@4 139
Chris@4 140 ----------
Chris@4 141 -- Read --
Chris@4 142 ----------
Chris@4 143
Chris@4 144 procedure Read
Chris@4 145 (Item : out Stream_Element_Array;
Chris@4 146 Last : out Stream_Element_Offset) is
Chris@4 147 begin
Chris@4 148 Ada.Streams.Read (Stream.Back.all, Item, Last);
Chris@4 149 end Read;
Chris@4 150
Chris@4 151 procedure Read is new ZLib.Read
Chris@4 152 (Read => Read,
Chris@4 153 Buffer => Stream.Buffer.all,
Chris@4 154 Rest_First => Stream.Rest_First,
Chris@4 155 Rest_Last => Stream.Rest_Last);
Chris@4 156
Chris@4 157 begin
Chris@4 158 Read (Stream.Reader, Item, Last);
Chris@4 159 end Read;
Chris@4 160
Chris@4 161 -------------------
Chris@4 162 -- Read_Total_In --
Chris@4 163 -------------------
Chris@4 164
Chris@4 165 function Read_Total_In (Stream : in Stream_Type) return Count is
Chris@4 166 begin
Chris@4 167 return Total_In (Stream.Reader);
Chris@4 168 end Read_Total_In;
Chris@4 169
Chris@4 170 --------------------
Chris@4 171 -- Read_Total_Out --
Chris@4 172 --------------------
Chris@4 173
Chris@4 174 function Read_Total_Out (Stream : in Stream_Type) return Count is
Chris@4 175 begin
Chris@4 176 return Total_Out (Stream.Reader);
Chris@4 177 end Read_Total_Out;
Chris@4 178
Chris@4 179 -----------
Chris@4 180 -- Write --
Chris@4 181 -----------
Chris@4 182
Chris@4 183 procedure Write
Chris@4 184 (Stream : in out Stream_Type;
Chris@4 185 Item : in Stream_Element_Array)
Chris@4 186 is
Chris@4 187
Chris@4 188 procedure Write (Item : in Stream_Element_Array);
Chris@4 189
Chris@4 190 -----------
Chris@4 191 -- Write --
Chris@4 192 -----------
Chris@4 193
Chris@4 194 procedure Write (Item : in Stream_Element_Array) is
Chris@4 195 begin
Chris@4 196 Ada.Streams.Write (Stream.Back.all, Item);
Chris@4 197 end Write;
Chris@4 198
Chris@4 199 procedure Write is new ZLib.Write
Chris@4 200 (Write => Write,
Chris@4 201 Buffer_Size => Stream.Buffer_Size);
Chris@4 202
Chris@4 203 begin
Chris@4 204 Write (Stream.Writer, Item, No_Flush);
Chris@4 205 end Write;
Chris@4 206
Chris@4 207 --------------------
Chris@4 208 -- Write_Total_In --
Chris@4 209 --------------------
Chris@4 210
Chris@4 211 function Write_Total_In (Stream : in Stream_Type) return Count is
Chris@4 212 begin
Chris@4 213 return Total_In (Stream.Writer);
Chris@4 214 end Write_Total_In;
Chris@4 215
Chris@4 216 ---------------------
Chris@4 217 -- Write_Total_Out --
Chris@4 218 ---------------------
Chris@4 219
Chris@4 220 function Write_Total_Out (Stream : in Stream_Type) return Count is
Chris@4 221 begin
Chris@4 222 return Total_Out (Stream.Writer);
Chris@4 223 end Write_Total_Out;
Chris@4 224
Chris@4 225 end ZLib.Streams;