linux_perf_event_reader/
registers.rs

1use crate::RawDataU64;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub struct Regs<'a> {
5    regs_mask: u64,
6    raw_regs: RawDataU64<'a>,
7}
8
9impl<'a> Regs<'a> {
10    pub fn new(regs_mask: u64, raw_regs: RawDataU64<'a>) -> Self {
11        Self {
12            regs_mask,
13            raw_regs,
14        }
15    }
16
17    pub fn get(&self, register: u64) -> Option<u64> {
18        if self.regs_mask & (1 << register) == 0 {
19            return None;
20        }
21
22        let mut index = 0;
23        for i in 0..register {
24            if self.regs_mask & (1 << i) != 0 {
25                index += 1;
26            }
27        }
28        self.raw_regs.get(index)
29    }
30}