~ubuntu-branches/ubuntu/utopic/critcl/utopic

« back to all changes in this revision

Viewing changes to examples/zlibwrap/zlib/contrib/ada/read.adb

  • Committer: Package Import Robot
  • Author(s): Andrew Shadura
  • Date: 2013-05-11 00:08:06 UTC
  • Revision ID: package-import@ubuntu.com-20130511000806-7hq1zc3fnn0gat79
Tags: upstream-3.1.9
ImportĀ upstreamĀ versionĀ 3.1.9

Show diffs side-by-side

added added

removed removed

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