use crate::pidentries::PidStatm;
use crate::util::find_to_pos;
#[derive(Debug, Default, Clone)]
pub struct PidStatmParser();
impl PidStatmParser {
pub fn parse(&mut self, sl: &[u8]) -> PidStatm {
let mut statm = PidStatm::default();
if sl.is_empty() {
return statm;
}
let mut pos1: usize = 0;
let mut pos2: usize;
{
macro_rules! myscan {
() => {{
pos2 = {
let haystack = &sl[pos1..];
let needle = b" ";
pos1 + find_to_pos(haystack, needle)
};
let s = &sl[pos1..pos2];
pos1 = pos2 + 1;
let input = String::from_utf8_lossy(s);
input.as_ref().parse().unwrap()
}};
}
statm.size = myscan!();
statm.resident = myscan!();
statm.share = myscan!();
statm.text = myscan!();
statm.lib = myscan!();
statm.data = myscan!();
let _ = pos1;
}
statm
}
}