annotate src/zlib-1.2.8/contrib/ada/zlib-streams.adb @ 169:223a55898ab9 tip default

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