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
use super::ComparisonGenerator;
use {Attempt, Segment, Time, TimingMethod};
use sum_of_segments::worst::calculate;

#[derive(Copy, Clone, Debug)]
pub struct WorstSegments;

pub const NAME: &'static str = "Worst Segments";

impl ComparisonGenerator for WorstSegments {
    fn name(&self) -> &str {
        NAME
    }

    fn generate(&mut self, segments: &mut [Segment], _: &[Attempt]) {
        let mut real_time_predictions = vec![None; segments.len() + 1];
        let mut game_time_predictions = vec![None; segments.len() + 1];

        calculate(segments,
                  0,
                  segments.len(),
                  &mut real_time_predictions,
                  false,
                  TimingMethod::RealTime);
        calculate(segments,
                  0,
                  segments.len(),
                  &mut game_time_predictions,
                  false,
                  TimingMethod::GameTime);

        for ((segment, &real_time), &game_time) in
            segments.iter_mut()
                .zip(real_time_predictions[1..].iter())
                .zip(game_time_predictions[1..].iter()) {
            *segment.comparison_mut(NAME) = Time::new()
                .with_real_time(real_time)
                .with_game_time(game_time);
        }
    }
}