diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bundles-containers.adb | 2 | ||||
-rw-r--r-- | src/bundles-containers.ads | 8 | ||||
-rw-r--r-- | src/election.adb | 20 | ||||
-rw-r--r-- | src/stv.adb | 6 |
4 files changed, 14 insertions, 22 deletions
diff --git a/src/bundles-containers.adb b/src/bundles-containers.adb index a027727..d1b1130 100644 --- a/src/bundles-containers.adb +++ b/src/bundles-containers.adb @@ -40,7 +40,7 @@ package body Bundles.Containers is if Current_Prefs (Given_Prefs.Preference_Range'First) /= Candidates.No_Candidate then - Result (Candidate_Range (Current_Prefs (Given_Prefs.Preference_Range'First))).Reference + Result (Current_Prefs (Given_Prefs.Preference_Range'First)).Reference (1).Papers.Append (Current_Prefs); end if; end if; diff --git a/src/bundles-containers.ads b/src/bundles-containers.ads index 1982693..8caf263 100644 --- a/src/bundles-containers.ads +++ b/src/bundles-containers.ads @@ -6,19 +6,19 @@ with generic - type Candidate_Range is range <>; + Min_Valid : Candidates.CandidateID; + Max_Valid : Candidates.CandidateID; package Bundles.Containers is package Bundle_Vectors is new Ada.Containers.Vectors (Index_Type => Positive, Element_Type => Bundle); - - subtype Bundle_Vector is Bundle_Vectors.Vector; - type Bundle_Collection is array (Candidate_Range) of Bundle_Vector; + subtype Valid_CandidateID is Candidates.CandidateID range Min_Valid .. Max_Valid; + type Bundle_Collection is array (Valid_CandidateID) of Bundle_Vector; procedure Read_Bundles diff --git a/src/election.adb b/src/election.adb index c7de32b..7e825b3 100644 --- a/src/election.adb +++ b/src/election.adb @@ -22,12 +22,6 @@ package body Election is package SU renames Ada.Strings.Unbounded; - -- These make converting back and forth easier. - -- Why are they distinct types? Because you can't pass a subtype to a generic. - subtype CanID is Candidates.CandidateID; - subtype CID_Range is Bundle_Containers.Candidate_Range; - - -- Candidate, preference data, and other information @@ -79,11 +73,11 @@ package body Election is This : Entry_Data; begin Entries := Entry_Vectors.Empty_Vector; - for CID in Bundle_Containers.Candidate_Range loop + for CID in Bundle_Containers.Valid_CandidateID loop Given_Bundles.Count_Both (Pref_Data (CID).First_Element, Votes, Papers); This := - (ID => CanID (CID), + (ID => CID, Vote_Change => Votes, Total_Votes => Votes, Paper_Change => Papers, @@ -421,7 +415,7 @@ package body Election is Given_Bundles.Count_Both (New_Bundle, Votes_In, Papers_In); if Votes_In > 0 then - Pref_Data (CID_Range (Working_ID)).Append (New_Bundle); + Pref_Data (Working_ID).Append (New_Bundle); declare Entry_Ref : Entry_Vectors.Reference_Type := Entries.Reference (Working_Position); @@ -463,22 +457,22 @@ package body Election is This_Transfer := Transfers.First_Element; - while Pref_Data (CID_Range (This_Transfer.From)).Length > 0 loop + while Pref_Data (This_Transfer.From).Length > 0 loop Redistribute_Papers (Still_Running => Running_Positions, Already_Excluded => Not_Considered, - Transfer_Bundle => Pref_Data (CID_Range (This_Transfer.From)).Reference (1), + Transfer_Bundle => Pref_Data (This_Transfer.From).Reference (1), Transfer => This_Transfer, Fractional_Loss => Fractional_Loss, Exhausted_Loss => Exhausted_Loss); - Pref_Data (CID_Range (This_Transfer.From)).Delete (1); + Pref_Data (This_Transfer.From).Delete (1); Fractional.Paper_Change := Fractional.Paper_Change + Fractional_Loss; Exhausted.Paper_Change := Exhausted.Paper_Change + Exhausted_Loss; end loop; - if Pref_Data (CID_Range (This_Transfer.From)).Length = 0 then + if Pref_Data (This_Transfer.From).Length = 0 then declare Entry_Ref : Entry_Vectors.Reference_Type := Entries.Reference (This_Transfer.Position); diff --git a/src/stv.adb b/src/stv.adb index 29b18c9..20b5b29 100644 --- a/src/stv.adb +++ b/src/stv.adb @@ -237,9 +237,6 @@ begin -- Set up and run the election singleton declare - subtype Valid_CandidateID is Candidates.CandidateID - range Candidate_Data.First_Index .. Candidate_Data.Last_Index; - package Given_Prefs is new Preferences (Above_Ballot => Above_Ballot, Below_Ballot => Below_Ballot); @@ -248,7 +245,8 @@ begin (Given_Prefs => Given_Prefs); package Vote_Bundle_Containers is new Vote_Bundles.Containers - (Candidate_Range => Valid_CandidateID); + (Min_Valid => Candidate_Data.First_Index, + Max_Valid => Candidate_Data.Last_Index); package This_Election is new Election (Given_Bundles => Vote_Bundles, |