annotate src/zlib-1.2.7/contrib/ada/zlib-streams.adb @ 4:e13257ea84a4

Add bzip2, zlib, liblo, portaudio sources
author Chris Cannam
date Wed, 20 Mar 2013 13:59:52 +0000
parents
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;