calltrace 0.1.12

A service to structure your call traces (call stacks)
Documentation
use crate::calls::callstack::CallStack;
use crate::calls::CallStacks;
use std::collections::HashMap;
use std::fmt;
pub struct Folder {
    pub map: HashMap<CallStack, usize>,
}

impl std::fmt::Display for Folder {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        for (k, v) in &self.map {
            writeln!(f, "count: {}", *v)?;
            write!(f, "{}", &k)?;
        }
        writeln!(f)
    }
}

impl Folder {
    pub fn new(css: &CallStacks) -> Self {
        let mut folder = Folder {
            map: HashMap::new(),
        };
        for cs in css.iter() {
            folder.insert(cs.clone(), 1);
        }
        folder
    }
    pub fn insert(&mut self, cs: CallStack, count: usize) -> usize {
        *self
            .map
            .entry(cs)
            .and_modify(|e| *e += count)
            .or_insert(count)
    }
    pub fn len(&self) -> usize {
        self.map.len()
    }
    pub fn is_empty(&self) -> bool {
        self.map.is_empty()
    }
    pub fn has(&self, k: &CallStack) -> bool {
        self.map.contains_key(k)
    }
}