-
Notifications
You must be signed in to change notification settings - Fork 0
/
initialize.go
70 lines (53 loc) · 1.45 KB
/
initialize.go
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
package meekstv
import (
"errors"
"github.com/shawntoffel/election"
"github.com/shawntoffel/math"
"github.com/shawntoffel/meekstv/events"
)
func (m *meekStv) setupTitle(config election.Config) {
m.Title = config.Title
}
func (m *meekStv) setupNumSeats(config election.Config) {
if config.NumSeats < 1 {
m.Error = errors.New("At least one seat is required for election.")
}
m.NumSeats = config.NumSeats
}
func (m *meekStv) setupPrecision(config election.Config) {
m.Precision = config.Precision
}
func (m *meekStv) setupBallots(config election.Config) {
m.Ballots = config.Ballots
}
func (m *meekStv) setupScale(config election.Config) {
if m.Precision == 0 {
m.setupPrecision(config)
}
m.Scale = math.Pow64(10, int64(m.Precision))
}
func (m *meekStv) setupPool(config election.Config) {
if m.Scale == 0 {
m.setupScale(config)
}
m.Pool.AddNewCandidates(config.Candidates, m.Scale)
m.excludeWithdrawnCandidates(config.WithdrawnCandidates)
}
func (m *meekStv) setupMaxIterations(config election.Config) {
m.MaxIterations = 1000
}
func (m *meekStv) setupSeed(config election.Config) {
m.Seed = config.Seed
}
func (m *meekStv) excludeWithdrawnCandidates(names []string) {
excluded := []string{}
for _, name := range names {
candidates := m.Pool.ExcludeByName(name)
for _, candidate := range candidates {
excluded = append(excluded, candidate.Name)
}
}
if len(excluded) > 0 {
m.AddEvent(&events.CandidatesExcluded{Names: excluded})
}
}