eutils_rs/
delay_distribution.rs1pub struct DelayDistribution {
2 number: usize,
3 dis: Vec<usize>,
4}
5
6impl DelayDistribution {
7 pub fn new() -> DelayDistribution {
8 DelayDistribution {
9 number: 0,
10 dis: Vec::default(),
11 }
12 }
13
14 pub fn insert(&mut self, delay: usize) {
18 if delay > 1_000_000 {
19 panic!("delay out of range, max support 1_000_000")
20 }
21
22 if delay >= self.dis.len() {
23 self.dis.resize(delay + 1, 0);
24 }
25
26 self.dis[delay] += 1;
27 self.number += 1;
28 }
29
30 pub fn show(&self, kinds: usize) {
31 let width = (self.dis.len() + kinds - 1) / kinds;
33
34 for i in 0..kinds {
35 let start = i * width;
36 let end = std::cmp::min(start + width, self.dis.len());
37
38 let mut sum = 0;
39 for j in start..end {
40 sum += self.dis[j];
41 }
42
43 print!("{:<6}: ", end);
44 for _ in 0..(sum * 100 / self.number) {
45 print!("*");
46 }
47
48 println!();
49 }
50 }
51}