annotate src/zlib-1.2.7/contrib/ada/read.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: read.adb,v 1.8 2004/05/31 10:53:40 vagul Exp $
Chris@4 10
Chris@4 11 -- Test/demo program for the generic read interface.
Chris@4 12
Chris@4 13 with Ada.Numerics.Discrete_Random;
Chris@4 14 with Ada.Streams;
Chris@4 15 with Ada.Text_IO;
Chris@4 16
Chris@4 17 with ZLib;
Chris@4 18
Chris@4 19 procedure Read is
Chris@4 20
Chris@4 21 use Ada.Streams;
Chris@4 22
Chris@4 23 ------------------------------------
Chris@4 24 -- Test configuration parameters --
Chris@4 25 ------------------------------------
Chris@4 26
Chris@4 27 File_Size : Stream_Element_Offset := 100_000;
Chris@4 28
Chris@4 29 Continuous : constant Boolean := False;
Chris@4 30 -- If this constant is True, the test would be repeated again and again,
Chris@4 31 -- with increment File_Size for every iteration.
Chris@4 32
Chris@4 33 Header : constant ZLib.Header_Type := ZLib.Default;
Chris@4 34 -- Do not use Header other than Default in ZLib versions 1.1.4 and older.
Chris@4 35
Chris@4 36 Init_Random : constant := 8;
Chris@4 37 -- We are using the same random sequence, in case of we catch bug,
Chris@4 38 -- so we would be able to reproduce it.
Chris@4 39
Chris@4 40 -- End --
Chris@4 41
Chris@4 42 Pack_Size : Stream_Element_Offset;
Chris@4 43 Offset : Stream_Element_Offset;
Chris@4 44
Chris@4 45 Filter : ZLib.Filter_Type;
Chris@4 46
Chris@4 47 subtype Visible_Symbols
Chris@4 48 is Stream_Element range 16#20# .. 16#7E#;
Chris@4 49
Chris@4 50 package Random_Elements is new
Chris@4 51 Ada.Numerics.Discrete_Random (Visible_Symbols);
Chris@4 52
Chris@4 53 Gen : Random_Elements.Generator;
Chris@4 54 Period : constant Stream_Element_Offset := 200;
Chris@4 55 -- Period constant variable for random generator not to be very random.
Chris@4 56 -- Bigger period, harder random.
Chris@4 57
Chris@4 58 Read_Buffer : Stream_Element_Array (1 .. 2048);
Chris@4 59 Read_First : Stream_Element_Offset;
Chris@4 60 Read_Last : Stream_Element_Offset;
Chris@4 61
Chris@4 62 procedure Reset;
Chris@4 63
Chris@4 64 procedure Read
Chris@4 65 (Item : out Stream_Element_Array;
Chris@4 66 Last : out Stream_Element_Offset);
Chris@4 67 -- this procedure is for generic instantiation of
Chris@4 68 -- ZLib.Read
Chris@4 69 -- reading data from the File_In.
Chris@4 70
Chris@4 71 procedure Read is new ZLib.Read
Chris@4 72 (Read,
Chris@4 73 Read_Buffer,
Chris@4 74 Rest_First => Read_First,
Chris@4 75 Rest_Last => Read_Last);
Chris@4 76
Chris@4 77 ----------
Chris@4 78 -- Read --
Chris@4 79 ----------
Chris@4 80
Chris@4 81 procedure Read
Chris@4 82 (Item : out Stream_Element_Array;
Chris@4 83 Last : out Stream_Element_Offset) is
Chris@4 84 begin
Chris@4 85 Last := Stream_Element_Offset'Min
Chris@4 86 (Item'Last,
Chris@4 87 Item'First + File_Size - Offset);
Chris@4 88
Chris@4 89 for J in Item'First .. Last loop
Chris@4 90 if J < Item'First + Period then
Chris@4 91 Item (J) := Random_Elements.Random (Gen);
Chris@4 92 else
Chris@4 93 Item (J) := Item (J - Period);
Chris@4 94 end if;
Chris@4 95
Chris@4 96 Offset := Offset + 1;
Chris@4 97 end loop;
Chris@4 98 end Read;
Chris@4 99
Chris@4 100 -----------
Chris@4 101 -- Reset --
Chris@4 102 -----------
Chris@4 103
Chris@4 104 procedure Reset is
Chris@4 105 begin
Chris@4 106 Random_Elements.Reset (Gen, Init_Random);
Chris@4 107 Pack_Size := 0;
Chris@4 108 Offset := 1;
Chris@4 109 Read_First := Read_Buffer'Last + 1;
Chris@4 110 Read_Last := Read_Buffer'Last;
Chris@4 111 end Reset;
Chris@4 112
Chris@4 113 begin
Chris@4 114 Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
Chris@4 115
Chris@4 116 loop
Chris@4 117 for Level in ZLib.Compression_Level'Range loop
Chris@4 118
Chris@4 119 Ada.Text_IO.Put ("Level ="
Chris@4 120 & ZLib.Compression_Level'Image (Level));
Chris@4 121
Chris@4 122 -- Deflate using generic instantiation.
Chris@4 123
Chris@4 124 ZLib.Deflate_Init
Chris@4 125 (Filter,
Chris@4 126 Level,
Chris@4 127 Header => Header);
Chris@4 128
Chris@4 129 Reset;
Chris@4 130
Chris@4 131 Ada.Text_IO.Put
Chris@4 132 (Stream_Element_Offset'Image (File_Size) & " ->");
Chris@4 133
Chris@4 134 loop
Chris@4 135 declare
Chris@4 136 Buffer : Stream_Element_Array (1 .. 1024);
Chris@4 137 Last : Stream_Element_Offset;
Chris@4 138 begin
Chris@4 139 Read (Filter, Buffer, Last);
Chris@4 140
Chris@4 141 Pack_Size := Pack_Size + Last - Buffer'First + 1;
Chris@4 142
Chris@4 143 exit when Last < Buffer'Last;
Chris@4 144 end;
Chris@4 145 end loop;
Chris@4 146
Chris@4 147 Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size));
Chris@4 148
Chris@4 149 ZLib.Close (Filter);
Chris@4 150 end loop;
Chris@4 151
Chris@4 152 exit when not Continuous;
Chris@4 153
Chris@4 154 File_Size := File_Size + 1;
Chris@4 155 end loop;
Chris@4 156 end Read;