Index: tools/smaz.adb ================================================================== --- tools/smaz.adb +++ tools/smaz.adb @@ -131,10 +131,16 @@ (Handler : in out Callback; Argument : in String) is null; + function Activate_Dictionary (Dict : in Natools.Smaz_256.Dictionary) + return Natools.Smaz_256.Dictionary; + function Activate_Dictionary (Dict : in Natools.Smaz.Dictionary) + return Natools.Smaz.Dictionary; + -- Update Dictionary.Hash so that it can be actually used + procedure Build_Perfect_Hash (Word_List : in Natools.Smaz.Tools.String_Lists.List; Package_Name : in String); -- Adapter between Smaz_256 generator and retired Smaz types @@ -167,14 +173,10 @@ procedure Print_Help (Opt : in Getopt.Configuration; Output : in Ada.Text_IO.File_Type); -- Print the help text to the given file - procedure Use_Dictionary (Dict : in out Natools.Smaz_256.Dictionary); - procedure Use_Dictionary (Dict : in out Natools.Smaz.Dictionary); - -- Update Dictionary.Hash so that it can be actually used - generic type Dictionary (<>) is private; type Dictionary_Entry is (<>); @@ -185,10 +187,13 @@ type Dictionary_Counts is array (Dictionary_Entry) of String_Count; with package String_Lists is new Ada.Containers.Indefinite_Doubly_Linked_Lists (String); + + with function Activate_Dictionary (Dict : in Dictionary) + return Dictionary is <>; with procedure Add_Substrings (Counter : in out Word_Counter; Phrase : in String; Min_Size : in Positive; @@ -276,12 +281,10 @@ with function To_Dictionary (List : in String_Lists.List; Variable_Length_Verbatim : in Boolean) return Dictionary; - with procedure Use_Dictionary (Dict : in out Dictionary) is <>; - with function Worst_Element (Dict : in Dictionary; Counts : in Dictionary_Counts; Method : in Methods) return Dictionary_Entry; @@ -367,14 +370,12 @@ Dict : in Dictionary; Corpus : in String_Lists.List; Compressed_Size : out Ada.Streams.Stream_Element_Count; Counts : out Dictionary_Counts) is - Actual_Dict : Dictionary := Dict; + Actual_Dict : constant Dictionary := Activate_Dictionary (Dict); begin - Use_Dictionary (Actual_Dict); - if Job_Count > 0 then Parallel_Evaluate_Dictionary (Job_Count, Actual_Dict, Corpus, Compressed_Size, Counts); else Evaluate_Dictionary @@ -606,20 +607,19 @@ (Handler : in Callback'Class; Word_List : in String_Lists.List; Data_List : in String_Lists.List; Method : in Methods) is - Dict : Dictionary := To_Dictionary (Handler, Word_List, Method); + Dict : constant Dictionary := Activate_Dictionary + (To_Dictionary (Handler, Word_List, Method)); Sx_Output : Natools.S_Expressions.Printers.Canonical (Ada.Text_IO.Text_Streams.Stream (Ada.Text_IO.Current_Output)); Ada_Dictionary : constant String := Ada.Strings.Unbounded.To_String (Handler.Ada_Dictionary); Hash_Package : constant String := Ada.Strings.Unbounded.To_String (Handler.Hash_Package); begin - Use_Dictionary (Dict); - if Ada_Dictionary'Length > 0 then Print_Dictionary (Ada_Dictionary, Dict, Hash_Package); end if; if Hash_Package'Length > 0 then @@ -1098,10 +1098,63 @@ when Options.Base_256_Retired => Handler.Algorithm := Algorithms.Base_256_Retired; end case; end Option; + + function Activate_Dictionary (Dict : in Natools.Smaz_256.Dictionary) + return Natools.Smaz_256.Dictionary + is + Result : Natools.Smaz_256.Dictionary := Dict; + begin + Natools.Smaz_Tools.Set_Dictionary_For_Trie_Search + (Tools_256.To_String_List (Result)); + Result.Hash := Natools.Smaz_Tools.Trie_Search'Access; + + for I in Result.Offsets'Range loop + if Natools.Smaz_Tools.Trie_Search (Natools.Smaz_256.Dict_Entry + (Result, I)) /= Natural (I) + then + Ada.Text_IO.Put_Line + (Ada.Text_IO.Current_Error, + "Fail at" & Ada.Streams.Stream_Element'Image (I) + & " -> " & Natools.String_Escapes.C_Escape_Hex + (Natools.Smaz_256.Dict_Entry (Result, I), True) + & " ->" & Natural'Image (Natools.Smaz_Tools.Trie_Search + (Natools.Smaz_256.Dict_Entry (Result, I)))); + end if; + end loop; + + return Result; + end Activate_Dictionary; + + + function Activate_Dictionary (Dict : in Natools.Smaz.Dictionary) + return Natools.Smaz.Dictionary + is + Result : Natools.Smaz.Dictionary := Dict; + begin + Natools.Smaz.Tools.Set_Dictionary_For_Trie_Search (Result); + Result.Hash := Natools.Smaz.Tools.Trie_Search'Access; + + for I in Result.Offsets'Range loop + if Natools.Smaz_Tools.Trie_Search (Natools.Smaz.Dict_Entry + (Result, I)) /= Natural (I) + then + Ada.Text_IO.Put_Line + (Ada.Text_IO.Current_Error, + "Fail at" & Ada.Streams.Stream_Element'Image (I) + & " -> " & Natools.String_Escapes.C_Escape_Hex + (Natools.Smaz.Dict_Entry (Result, I), True) + & " ->" & Natural'Image (Natools.Smaz.Tools.Trie_Search + (Natools.Smaz.Dict_Entry (Result, I)))); + end if; + end loop; + + return Result; + end Activate_Dictionary; + procedure Build_Perfect_Hash (Word_List : in Natools.Smaz.Tools.String_Lists.List; Package_Name : in String) is @@ -1368,53 +1421,10 @@ & "Use retired base-256 implementation"); end case; end loop; end Print_Help; - - procedure Use_Dictionary (Dict : in out Natools.Smaz_256.Dictionary) is - begin - Natools.Smaz_Tools.Set_Dictionary_For_Trie_Search - (Tools_256.To_String_List (Dict)); - Dict.Hash := Natools.Smaz_Tools.Trie_Search'Access; - - for I in Dict.Offsets'Range loop - if Natools.Smaz_Tools.Trie_Search (Natools.Smaz_256.Dict_Entry - (Dict, I)) /= Natural (I) - then - Ada.Text_IO.Put_Line - (Ada.Text_IO.Current_Error, - "Fail at" & Ada.Streams.Stream_Element'Image (I) - & " -> " & Natools.String_Escapes.C_Escape_Hex - (Natools.Smaz_256.Dict_Entry (Dict, I), True) - & " ->" & Natural'Image (Natools.Smaz_Tools.Trie_Search - (Natools.Smaz_256.Dict_Entry (Dict, I)))); - end if; - end loop; - end Use_Dictionary; - - - procedure Use_Dictionary (Dict : in out Natools.Smaz.Dictionary) is - begin - Natools.Smaz.Tools.Set_Dictionary_For_Trie_Search (Dict); - Dict.Hash := Natools.Smaz.Tools.Trie_Search'Access; - - for I in Dict.Offsets'Range loop - if Natools.Smaz_Tools.Trie_Search (Natools.Smaz.Dict_Entry - (Dict, I)) /= Natural (I) - then - Ada.Text_IO.Put_Line - (Ada.Text_IO.Current_Error, - "Fail at" & Ada.Streams.Stream_Element'Image (I) - & " -> " & Natools.String_Escapes.C_Escape_Hex - (Natools.Smaz.Dict_Entry (Dict, I), True) - & " ->" & Natural'Image (Natools.Smaz.Tools.Trie_Search - (Natools.Smaz.Dict_Entry (Dict, I)))); - end if; - end loop; - end Use_Dictionary; - Opt_Config : constant Getopt.Configuration := Getopt_Config; Handler : Callback; Input_List, Input_Data : Natools.Smaz_Tools.String_Lists.List; begin