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}