Index: tools/smaz.adb ================================================================== --- tools/smaz.adb +++ tools/smaz.adb @@ -100,10 +100,19 @@ (Handler : in out Callback; Argument : in String) is null; + procedure Evaluate_Dictionary + (Job_Count : in Natural; + Dict : in Natools.Smaz.Dictionary; + Corpus : in Natools.Smaz.Tools.String_Lists.List; + Compressed_Size : out Ada.Streams.Stream_Element_Count; + Counts : out Natools.Smaz.Tools.Dictionary_Counts); + -- Dispatch to parallel or non-parallel version of Evaluate_Dictionary + -- depending on Job_Count. + function Getopt_Config return Getopt.Configuration; -- Build the configuration object procedure Parallel_Evaluate_Dictionary (Job_Count : in Positive; @@ -211,10 +220,46 @@ Handler.Filter_Threshold := Natools.Smaz.Tools.String_Count'Value (Argument); end case; end Option; + + procedure Evaluate_Dictionary + (Job_Count : in Natural; + Dict : in Natools.Smaz.Dictionary; + Corpus : in Natools.Smaz.Tools.String_Lists.List; + Compressed_Size : out Ada.Streams.Stream_Element_Count; + Counts : out Natools.Smaz.Tools.Dictionary_Counts) + is + Actual_Dict : Natools.Smaz.Dictionary := Dict; + begin + Natools.Smaz.Tools.Set_Dictionary_For_Trie_Search (Actual_Dict); + Actual_Dict.Hash := Natools.Smaz.Tools.Trie_Search'Access; + + for I in Actual_Dict.Offsets'Range loop + if Natools.Smaz.Tools.Trie_Search (Natools.Smaz.Dict_Entry + (Actual_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 (Actual_Dict, I), True) + & " ->" & Natural'Image (Natools.Smaz.Tools.Trie_Search + (Natools.Smaz.Dict_Entry (Actual_Dict, I)))); + end if; + end loop; + + if Job_Count > 0 then + Parallel_Evaluate_Dictionary (Job_Count, + Actual_Dict, Corpus, Compressed_Size, Counts); + else + Natools.Smaz.Tools.Evaluate_Dictionary + (Actual_Dict, Corpus, Compressed_Size, Counts); + end if; + end Evaluate_Dictionary; + function Getopt_Config return Getopt.Configuration is use Getopt; use Options; R : Getopt.Configuration; @@ -698,24 +743,16 @@ Print_Line (Original_Total, Output_Total, Base64_Total); end; end if; when Actions.Evaluate => - Natools.Smaz.Tools.Set_Dictionary_For_Trie_Search (Dictionary); - Dictionary.Hash := Natools.Smaz.Tools.Trie_Search'Access; - declare Total_Size : Ada.Streams.Stream_Element_Count; Counts : Natools.Smaz.Tools.Dictionary_Counts; begin - if Handler.Job_Count > 0 then - Parallel_Evaluate_Dictionary (Handler.Job_Count, - Dictionary, Input_Data, Total_Size, Counts); - else - Natools.Smaz.Tools.Evaluate_Dictionary - (Dictionary, Input_Data, Total_Size, Counts); - end if; + Evaluate_Dictionary (Handler.Job_Count, + Dictionary, Input_Data, Total_Size, Counts); if Handler.Sx_Output then Sx_Output.Open_List; Sx_Output.Append_String (Ada.Strings.Fixed.Trim (Ada.Streams.Stream_Element_Count'Image (Total_Size),