use alloc::ffi::CString;
use core::{borrow::Borrow, ops::Deref};
use crate::{DispatchQueue, DispatchRetained};
dispatch_object!(
#[doc(alias = "dispatch_workloop_t")]
#[doc(alias = "dispatch_workloop_s")]
pub struct DispatchWorkloop;
);
dispatch_object_not_data!(unsafe DispatchWorkloop);
impl DispatchWorkloop {
pub fn new(label: &str, inactive: bool) -> DispatchRetained<Self> {
let label = CString::new(label).expect("Invalid label!");
unsafe {
if inactive {
DispatchWorkloop::__new_inactive(label.as_ptr())
} else {
DispatchWorkloop::__new(label.as_ptr())
}
}
}
}
impl Deref for DispatchWorkloop {
type Target = DispatchQueue;
#[inline]
fn deref(&self) -> &Self::Target {
let ptr: *const DispatchWorkloop = self;
let ptr: *const DispatchQueue = ptr.cast();
unsafe { &*ptr }
}
}
impl AsRef<DispatchQueue> for DispatchWorkloop {
#[inline]
fn as_ref(&self) -> &DispatchQueue {
self
}
}
impl Borrow<DispatchQueue> for DispatchWorkloop {
#[inline]
fn borrow(&self) -> &DispatchQueue {
self
}
}