annotate src/zlib-1.2.7/contrib/ada/read.adb @ 23:619f715526df sv_v2.1

Update Vamp plugin SDK to 2.5
author Chris Cannam
date Thu, 09 May 2013 10:52:46 +0100
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;