Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
read.adb
Package: zlib124.zip [view]
Upload User: shengde
Upload Date: 2021-02-21
Package Size: 638k
Code Size: 4k
Category:
Compress-Decompress algrithms
Development Platform:
Visual C++
- ----------------------------------------------------------------
- -- ZLib for Ada thick binding. --
- -- --
- -- Copyright (C) 2002-2003 Dmitriy Anisimkov --
- -- --
- -- Open source license information is in the zlib.ads file. --
- ----------------------------------------------------------------
- -- $Id: read.adb,v 1.8 2004/05/31 10:53:40 vagul Exp $
- -- Test/demo program for the generic read interface.
- with Ada.Numerics.Discrete_Random;
- with Ada.Streams;
- with Ada.Text_IO;
- with ZLib;
- procedure Read is
- use Ada.Streams;
- ------------------------------------
- -- Test configuration parameters --
- ------------------------------------
- File_Size : Stream_Element_Offset := 100_000;
- Continuous : constant Boolean := False;
- -- If this constant is True, the test would be repeated again and again,
- -- with increment File_Size for every iteration.
- Header : constant ZLib.Header_Type := ZLib.Default;
- -- Do not use Header other than Default in ZLib versions 1.1.4 and older.
- Init_Random : constant := 8;
- -- We are using the same random sequence, in case of we catch bug,
- -- so we would be able to reproduce it.
- -- End --
- Pack_Size : Stream_Element_Offset;
- Offset : Stream_Element_Offset;
- Filter : ZLib.Filter_Type;
- subtype Visible_Symbols
- is Stream_Element range 16#20# .. 16#7E#;
- package Random_Elements is new
- Ada.Numerics.Discrete_Random (Visible_Symbols);
- Gen : Random_Elements.Generator;
- Period : constant Stream_Element_Offset := 200;
- -- Period constant variable for random generator not to be very random.
- -- Bigger period, harder random.
- Read_Buffer : Stream_Element_Array (1 .. 2048);
- Read_First : Stream_Element_Offset;
- Read_Last : Stream_Element_Offset;
- procedure Reset;
- procedure Read
- (Item : out Stream_Element_Array;
- Last : out Stream_Element_Offset);
- -- this procedure is for generic instantiation of
- -- ZLib.Read
- -- reading data from the File_In.
- procedure Read is new ZLib.Read
- (Read,
- Read_Buffer,
- Rest_First => Read_First,
- Rest_Last => Read_Last);
- ----------
- -- Read --
- ----------
- procedure Read
- (Item : out Stream_Element_Array;
- Last : out Stream_Element_Offset) is
- begin
- Last := Stream_Element_Offset'Min
- (Item'Last,
- Item'First + File_Size - Offset);
- for J in Item'First .. Last loop
- if J < Item'First + Period then
- Item (J) := Random_Elements.Random (Gen);
- else
- Item (J) := Item (J - Period);
- end if;
- Offset := Offset + 1;
- end loop;
- end Read;
- -----------
- -- Reset --
- -----------
- procedure Reset is
- begin
- Random_Elements.Reset (Gen, Init_Random);
- Pack_Size := 0;
- Offset := 1;
- Read_First := Read_Buffer'Last + 1;
- Read_Last := Read_Buffer'Last;
- end Reset;
- begin
- Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
- loop
- for Level in ZLib.Compression_Level'Range loop
- Ada.Text_IO.Put ("Level ="
- & ZLib.Compression_Level'Image (Level));
- -- Deflate using generic instantiation.
- ZLib.Deflate_Init
- (Filter,
- Level,
- Header => Header);
- Reset;
- Ada.Text_IO.Put
- (Stream_Element_Offset'Image (File_Size) & " ->");
- loop
- declare
- Buffer : Stream_Element_Array (1 .. 1024);
- Last : Stream_Element_Offset;
- begin
- Read (Filter, Buffer, Last);
- Pack_Size := Pack_Size + Last - Buffer'First + 1;
- exit when Last < Buffer'Last;
- end;
- end loop;
- Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size));
- ZLib.Close (Filter);
- end loop;
- exit when not Continuous;
- File_Size := File_Size + 1;
- end loop;
- end Read;