annotate src/zlib-1.2.7/contrib/ada/read.adb @ 143:e95e00bdc3eb

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