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