Overview
Comment: | smaz_tools-gnat: duplication of GNAT tools for generic-based tree |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
29b53deb6d0d838db7b4230ac2262c76 |
User & Date: | nat on 2016-11-28 22:31:08 |
Other Links: | manifest | tags |
Context
2016-11-29
| ||
20:37 | tools/smaz: basic adaptation to use the generic framework check-in: ab9c060396 user: nat tags: trunk | |
2016-11-28
| ||
22:31 | smaz_tools-gnat: duplication of GNAT tools for generic-based tree check-in: 29b53deb6d user: nat tags: trunk | |
2016-11-27
| ||
22:32 | smaz_generic-tools: add conversion from dictionary to word list check-in: 00a41d7915 user: nat tags: trunk | |
Changes
Added src/natools-smaz_tools-gnat.adb version [bc7389a98e].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 65 | ------------------------------------------------------------------------------ -- 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 [9a4fff5268].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 gathers 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; |