Also bulk elect based on guarded candidates
This commit is contained in:
parent
c12743285a
commit
d697871414
|
@ -929,18 +929,18 @@ where
|
||||||
|
|
||||||
/// Declare all continuing candidates elected, if the number equals the number of remaining vacancies
|
/// Declare all continuing candidates elected, if the number equals the number of remaining vacancies
|
||||||
fn bulk_elect<N: Number>(state: &mut CountState<N>, opts: &STVOptions) -> Result<bool, STVError> {
|
fn bulk_elect<N: Number>(state: &mut CountState<N>, opts: &STVOptions) -> Result<bool, STVError> {
|
||||||
if state.election.candidates.len() - state.num_excluded <= state.election.seats {
|
let mut hopefuls: Vec<&Candidate> = state.election.candidates.iter()
|
||||||
|
.filter(|c| {
|
||||||
|
let cc = state.candidates.get(c).unwrap();
|
||||||
|
return cc.state == CandidateState::Hopeful || cc.state == CandidateState::Guarded;
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
if state.num_elected + hopefuls.len() <= state.election.seats {
|
||||||
state.kind = None;
|
state.kind = None;
|
||||||
state.title = "Bulk election".to_string();
|
state.title = "Bulk election".to_string();
|
||||||
|
|
||||||
// Bulk elect all remaining candidates
|
// Bulk elect all remaining candidates
|
||||||
let mut hopefuls: Vec<&Candidate> = state.election.candidates.iter()
|
|
||||||
.filter(|c| {
|
|
||||||
let cc = state.candidates.get(c).unwrap();
|
|
||||||
return cc.state == CandidateState::Hopeful || cc.state == CandidateState::Guarded;
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
while !hopefuls.is_empty() {
|
while !hopefuls.is_empty() {
|
||||||
let max_votes = hopefuls.iter()
|
let max_votes = hopefuls.iter()
|
||||||
.max_by(|a, b| state.candidates.get(**a).unwrap().votes.cmp(&state.candidates.get(**b).unwrap().votes))
|
.max_by(|a, b| state.candidates.get(**a).unwrap().votes.cmp(&state.candidates.get(**b).unwrap().votes))
|
||||||
|
|
Loading…
Reference in New Issue