papi_bindings/
counter.rs

1use crate::check_error;
2use crate::{PAPI_event_name_to_code, PapiError};
3use std::ffi::CString;
4use std::os::raw::c_int;
5
6#[derive(Clone)]
7#[allow(dead_code)]
8pub struct Counter {
9    pub(crate) name: String,
10    pub(crate) code: c_int,
11}
12
13impl Counter {
14    pub fn from_name(name: &str) -> Result<Counter, PapiError> {
15        let evt_name = CString::new(name.to_string()).unwrap();
16        let mut code = 0;
17
18        unsafe {
19            check_error(PAPI_event_name_to_code(
20                evt_name.as_ptr(),
21                &mut code as *mut _,
22            ))?;
23        }
24
25        Ok(Counter {
26            name: name.to_string(),
27            code,
28        })
29    }
30}