Skip to content
Snippets Groups Projects
Select Git revision
  • 6f613f81d8c26c2e7e96ab1ef6727adc3231e640
  • master default
2 results

formater.rs

Blame
  • Forked from Per Lindgren / klee_tutorial
    Source project has a limited visibility.
    formater.rs 3.22 KiB
    use super::common::*;
    use super::srp_analyser::*;
    
    
    /*
     * Creates a readable representation of the analysis and the given information.
     */
    pub fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String {
        let overview = format_overview(tasks, ip, tr);
    
        let mut body = String::new();
        for at in analysis {
            body = format!("{}\n{}", body, format_analysed_task(at));
        }
    
        body = format!("{}\n", body);
    
        for t in tasks {
            body = format!("{}\n{}", body, format_task(t));
        }
    
        return format!("{}\n{}", overview, body);
    }
    
    
    /*
     * Creates the overview section of the readable representation.
     */
    pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String {
        // Formats the names of all the tasks.
        fn format_task_names(tasks: &Tasks) -> String {
            let mut task_names = "Tasks:".to_string();
            for t in tasks {
                task_names = format!("{} {}", task_names, t.id);
            } 
            return task_names;
        }
    
        // Formats the Id and priority of tasks.
        fn format_id_prio(ip: &IdPrio) -> String {
    //    let id_prio = format!("Id Priority: {:?}", ip);
            let mut id_prio = "Priority:".to_string();
            for (key, value) in ip {
                id_prio = format!("{}  P({}) = {}", id_prio, key, value);
            }
            return id_prio;
        }
    
        // Formats the tasks resources.
        fn format_task_res(tr: &TaskResources) -> String {
    //    let task_res = format!("Task Resources: {:?}", tr);
            let mut task_res = "Task Resources:".to_string();
            for (key, value) in tr {
                
                let mut values_st = "(".to_string();
                for v in value {
                    values_st = format!("{} {}", values_st, v);
                }
                task_res = format!("{} {}:{} )", task_res, key, values_st);
            }
            return task_res;
        }
    
        let tot_util = format!("Total Util: {}", total_load_factor(tasks));
        let task_names = format_task_names(tasks);
        let id_prio = format_id_prio(ip);
        let task_res = format_task_res(tr);
    
        return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}", tot_util, task_names, id_prio, task_res); 
    }
     
    
    /*
     * Creates a readable representation of a analysed task.
     */
    pub fn format_analysed_task(task: &AnalysedTask) -> String {
        let header = format!("Analysis of {}", task.task.id);
        let res_t = format!("Response Time: {}", task.response_time);
        let wcet = format!("wcet: {}", task.wcet);
        let block_t = format!("Block Time: {}", task.block_time);
        let pre_t = format!("Preemption Time: {}", task.preemption_time);
        return format!("{}\n\t{}\n\t{}\n\t{}\n\t{}", header, res_t, wcet, block_t, pre_t);
    }
    
    
    /*
     * Creates a readable representation of a task.
     */
    pub fn format_task(task: &Task) -> String {
        let id = format!("Task {}", task.id);
        let prio = format!("Priority: {}", task.prio);
        let dl = format!("Deadline: {}", task.deadline);
        let inter_a = format!("Inter Arrival: {}", task.inter_arrival);
        let trace = format_trace(&task.trace);
        return format!("{}\n\t{}\n\t{}\n\t{}\n\t{}", id, prio, dl, inter_a, trace);
    }
    
    
    /*
     * Creates a readable representation of a trace.
     */
    pub fn format_trace(trace: &Trace) -> String {
        return format!("{:?}", trace);
    }