Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | smaz-tools-gnat: new package for Smaz tools that depend on GNAT |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
1fe48984fc70e83b60268ecdff3e8589 |
| User & Date: | nat 2016-09-08 21:42:00.845 |
Context
|
2016-09-10
| ||
| 14:12 | tools/smaz: add support for command-line options check-in: dd6ad78eeb user: nat tags: trunk | |
|
2016-09-08
| ||
| 21:42 | smaz-tools-gnat: new package for Smaz tools that depend on GNAT check-in: 1fe48984fc user: nat tags: trunk | |
|
2016-09-07
| ||
| 18:45 | tools/smaz: new tool providing a CLI interface for Natools.Smaz.Tools check-in: bae1665fad user: nat tags: trunk | |
Changes
Added src/natools-smaz-tools-gnat.adb.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
------------------------------------------------------------------------------
-- Copyright (c) 2016, Natacha Porté --
-- --
-- Permission to use, copy, modify, and distribute this software for any --
-- purpose with or without fee is hereby granted, provided that the above --
-- copyright notice and this permission notice appear in all copies. --
-- --
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES --
-- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF --
-- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR --
-- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES --
-- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN --
-- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF --
-- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --
------------------------------------------------------------------------------
with GNAT.Perfect_Hash_Generators;
package body Natools.Smaz.Tools.GNAT is
package Perfect_Hash_Generators
renames Standard.GNAT.Perfect_Hash_Generators;
procedure Build_Perfect_Hash
(List : in String_Lists.List;
Package_Name : in String)
is
Seed : Natural := 2;
NK : constant Float := Float (String_Lists.Length (List));
NV : Natural := Natural (String_Lists.Length (List)) * 2 + 1;
Retries_Before_Expand : constant := 2;
begin
for S of List loop
Perfect_Hash_Generators.Insert (S);
end loop;
Expanding_Retries :
loop
Retires_Without_Expand :
for I in 1 .. Retries_Before_Expand loop
begin
Perfect_Hash_Generators.Initialize (Seed, Float (NV) / NK);
Perfect_Hash_Generators.Compute;
exit Expanding_Retries;
exception
when Perfect_Hash_Generators.Too_Many_Tries => null;
end;
Seed := Seed * NV;
end loop Retires_Without_Expand;
NV := NV + 1;
Seed := NV;
end loop Expanding_Retries;
Perfect_Hash_Generators.Produce (Package_Name);
Perfect_Hash_Generators.Finalize;
exception
when others =>
Perfect_Hash_Generators.Finalize;
raise;
end Build_Perfect_Hash;
end Natools.Smaz.Tools.GNAT;
|
Added src/natools-smaz-tools-gnat.ads.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
------------------------------------------------------------------------------
-- Copyright (c) 2016, Natacha Porté --
-- --
-- Permission to use, copy, modify, and distribute this software for any --
-- purpose with or without fee is hereby granted, provided that the above --
-- copyright notice and this permission notice appear in all copies. --
-- --
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES --
-- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF --
-- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR --
-- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES --
-- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN --
-- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF --
-- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. --
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- Natools.Smaz.Tools.GNAT gather tools to handle Smaz diction aries that --
-- depend so heavily on GNAT that they cannot be considered portable. --
------------------------------------------------------------------------------
package Natools.Smaz.Tools.GNAT is
procedure Build_Perfect_Hash
(List : in String_Lists.List;
Package_Name : in String)
with Pre => (for all S of List => S'First = 1);
-- Generate a static hash function that can be used with a dictionary
-- built from List, using GNAT.Perfect_Hash_Generators.
-- The precondition reflects an assumption made by
-- GNAT.Perfect_Hash_Generators but not enforced,
-- which leads to nasty bugs.
end Natools.Smaz.Tools.GNAT;
|