blob: 8ba0d3082ed7a12231431e7dbbbe1df4d8bcba69 (
plain)
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
with Ada.Strings.Unbounded;
with Ada.Text_IO;
with 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;
procedure Update_Bundle
(B : in out Bundle) is
begin
Add (B, Item);
end Update_Bundle;
procedure Update_Vector
(C : in Candidates.CandidateID;
V : in out Bundle_Vectors.Vector) is
begin
V.Update_Element (V.First_Index, Update_Bundle'Access);
end Update_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
BMap.Update_Element (Current_Cursor, Update_Vector'Access);
else
declare
New_Bundle : Bundle := Empty_Bundle;
begin
Add (New_Bundle, 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 Ada.Containers.Count_Type;
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 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;
|