fn format_solutions, res: &IoCostTuneResult)()

in resctl-bench/src/bench/iocost_tune.rs [1801:1838]


    fn format_solutions<'a>(&self, out: &mut Box<dyn Write + 'a>, res: &IoCostTuneResult) {
        if self.rules.len() == 0 {
            return;
        }

        write!(out, "{}\n", &double_underline("Solutions")).unwrap();

        let mut rules: Vec<&QoSRule> = vec![];
        let mut prev_sol: Option<&QoSSolution> = None;
        let mut flush = |rules: &mut Vec<&QoSRule>, prev_sol: Option<&QoSSolution>| {
            if rules.len() > 0 {
                Self::format_rules(out, &rules);
                match prev_sol {
                    Some(prev_sol) => Self::format_one_solution(out, prev_sol, &res.isol_pct),
                    None => writeln!(out, "  NO SOLUTION").unwrap(),
                }
                writeln!(out, "").unwrap();
                rules.clear();
            }
        };

        for rule in self.rules.iter() {
            let sol = res.solutions.get(&rule.name);
            if !rules.is_empty()
                && !(sol.is_none() && prev_sol.is_none())
                && !((sol.is_some() && prev_sol.is_some())
                    && sol
                        .as_ref()
                        .unwrap()
                        .equal_sans_target(prev_sol.as_ref().unwrap()))
            {
                flush(&mut rules, prev_sol);
            }
            rules.push(rule);
            prev_sol = sol;
        }
        flush(&mut rules, prev_sol);
    }