annotate src/zlib-1.2.8/contrib/ada/zlib-streams.adb @ 56:af97cad61ff0

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