summaryrefslogtreecommitdiff
path: root/src/election.ads
blob: 3da5e5a755291fa0913bd68707d72a96f16eff24 (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


with Candidates.Containers;
with Bundles.Containers;
private with Ada.Containers.Vectors;
private with Rationals;


--  This source is licensed under Creative Commons CC0 v1.0.
--
--  To read the full text, see license.txt in the main directory of this repository
--  or go to https://creativecommons.org/publicdomain/zero/1.0/legalcode.txt
--
--  For a human readable summary, go to https://creativecommons.org/publicdomain/zero/1.0/


generic
    with package Given_Bundles is new Bundles (<>);
    with package Bundle_Containers is new Given_Bundles.Containers (<>);
package Election is


    procedure Setup
           (Candidate_Data           : in Candidates.Containers.Candidate_Map;
            Preference_File          : in String;
            Output_Dir, Main_Logfile : in String;
            Number_To_Elect          : in Natural;
            Is_Verbose               : in Boolean := False)
        with Post => Is_Properly_Setup;


    procedure Run
        with Pre => Is_Properly_Setup;


    function Is_Properly_Setup
        return Boolean;


private


    type Candidate_Status is (Elected, Running, Excluded);


    type Entry_Data is record
        ID            : Candidates.CandidateID;
        Vote_Change   : Integer;
        Total_Votes   : Natural;
        Paper_Change  : Integer;
        Total_Papers  : Natural;
        Status        : Candidate_Status;
        Changed       : Boolean;
        Order_Elected : Natural;
    end record;


    package Entry_Vectors is new Ada.Containers.Vectors
           (Index_Type   => Positive,
            Element_Type => Entry_Data);


    type Pending_Transfer is record
        From     : Candidates.CandidateID;
        Position : Positive;
        Value    : Rationals.Fraction;
    end record;


    package Transfer_Vectors is new Ada.Containers.Vectors
           (Index_Type   => Positive,
            Element_Type => Pending_Transfer);


    --  This is used to keep track of exhausted and
    --  fractional loss papers.
    type Extra_Data is record
        Paper_Change : Integer;
        Total_Papers : Natural;
    end record;


end Election;