with Ada.Strings.Unbounded, Ada.Text_IO, CSV; package body Bundles.Containers is package SU renames Ada.Strings.Unbounded; procedure Add_To_Map (BMap : in out Bundle_Maps.Map; Item : in Given_Prefs.Preference_Array) is use type Bundle_Maps.Cursor; use type Bundle_Vectors.Vector; Place : Candidates.CandidateID := Item (Given_Prefs.Preference_Range'First); Current_Cursor : Bundle_Maps.Cursor := BMap.Find (Place); begin if Current_Cursor /= Bundle_Maps.No_Element then declare Vec_Ref : Bundle_Maps.Reference_Type := BMap.Reference (Current_Cursor); Bundle_Ref : Bundle_Vectors.Reference_Type := Vec_Ref.Reference (Vec_Ref.First_Index); begin Bundle_Ref.Papers.Append (Item); end; else declare New_Bundle : Bundle := Empty_Bundle; begin New_Bundle.Papers.Append (Item); BMap.Insert (Place, Bundle_Vectors.Empty_Vector & New_Bundle); end; end if; end Add_To_Map; procedure Read_Bundles (Filename : in String; Result : out Bundle_Maps.Map) is package My_CSV is new CSV; use Ada.Text_IO; use type Candidates.CandidateID; Input_File : File_Type; Current_Record : My_CSV.CSV_Record; Current_Prefs : Given_Prefs.Preference_Array; begin Open (Input_File, In_File, Filename); Result := Bundle_Maps.Empty_Map; while not End_Of_File (Input_File) loop Current_Record := My_CSV.Parse_Line (Get_Line (Input_File)); if Integer (Current_Record.Length) > 0 then Current_Prefs := Given_Prefs.Parse_Preferences (SU.To_String (Current_Record.Last_Element)); if Current_Prefs (Given_Prefs.Preference_Range'First) /= Candidates.No_Candidate then Add_To_Map (Result, Current_Prefs); end if; end if; end loop; Close (Input_File); end Read_Bundles; end Bundles.Containers;