use crate::util::access_sys_fn;
use std::ffi::CString;
pub struct Domain(*mut ittapi_sys::__itt_domain);
impl Domain {
#[must_use]
pub fn new(name: &str) -> Self {
#[cfg(unix)]
let create_fn = access_sys_fn!(__itt_domain_create_ptr__3_0);
#[cfg(windows)]
let create_fn = access_sys_fn!(__itt_domain_createA_ptr__3_0);
let c_string =
CString::new(name).expect("unable to create a CString; does it contain a 0 byte?");
let domain = unsafe { create_fn(c_string.as_ptr()) };
Self(domain)
}
pub(crate) fn as_ptr(&self) -> *const ittapi_sys::__itt_domain {
self.0.cast_const()
}
}
unsafe impl Sync for Domain {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[should_panic(expected = "unable to create a CString; does it contain a 0 byte?")]
fn zero_byte() {
let _domain = Domain::new("zero\0byte\0name");
}
}