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 on 2016-09-08 21:42:00 |
Other Links: | manifest | tags |
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 version [a6af22d91b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 version [1ac639ab84].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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; |