#![allow(unused_imports)]
#![allow(deprecated)]
#![allow(non_snake_case)]
#![allow(non_camel_case_types)]
#![allow(non_upper_case_globals)]
#![allow(missing_docs)]
#![allow(clippy::too_many_arguments)]
#![allow(clippy::type_complexity)]
#![allow(clippy::upper_case_acronyms)]
#![allow(clippy::identity_op)]
#![allow(clippy::missing_safety_doc)]
#![allow(clippy::doc_lazy_continuation)]
#![allow(rustdoc::broken_intra_doc_links)]
#![allow(rustdoc::bare_urls)]
#![allow(rustdoc::unportable_markdown)]
#![allow(rustdoc::invalid_html_tags)]
use core::ffi::*;
use core::ptr::NonNull;
#[cfg(feature = "objc2")]
use objc2::__framework_prelude::*;
use crate::*;
pub const DISPATCH_API_VERSION: c_uint = 20181008;
impl DispatchTime {
#[doc(alias = "dispatch_time")]
#[must_use]
#[inline]
pub fn time(self: DispatchTime, delta: i64) -> DispatchTime {
extern "C" {
fn dispatch_time(when: DispatchTime, delta: i64) -> DispatchTime;
}
unsafe { dispatch_time(self, delta) }
}
#[doc(alias = "dispatch_walltime")]
#[cfg(feature = "libc")]
#[must_use]
#[inline]
pub unsafe fn walltime(when: *const libc::timespec, delta: i64) -> DispatchTime {
extern "C" {
fn dispatch_walltime(when: *const libc::timespec, delta: i64) -> DispatchTime;
}
unsafe { dispatch_walltime(when, delta) }
}
}
#[cfg(feature = "block2")]
pub type dispatch_block_t = *mut block2::DynBlock<dyn Fn()>;
extern "C" {
pub fn dispatch_retain(object: NonNull<dispatch_object_s>);
}
extern "C" {
pub fn dispatch_release(object: NonNull<dispatch_object_s>);
}
#[must_use]
#[inline]
pub extern "C" fn dispatch_get_context(object: NonNull<dispatch_object_s>) -> *mut c_void {
extern "C" {
fn dispatch_get_context(object: NonNull<dispatch_object_s>) -> *mut c_void;
}
unsafe { dispatch_get_context(object) }
}
extern "C" {
pub fn dispatch_set_context(object: NonNull<dispatch_object_s>, context: *mut c_void);
}
extern "C" {
pub fn dispatch_set_finalizer_f(
object: NonNull<dispatch_object_s>,
finalizer: dispatch_function_t,
);
}
#[inline]
pub extern "C" fn dispatch_activate(object: NonNull<dispatch_object_s>) {
extern "C" {
fn dispatch_activate(object: NonNull<dispatch_object_s>);
}
unsafe { dispatch_activate(object) }
}
#[inline]
pub extern "C" fn dispatch_suspend(object: NonNull<dispatch_object_s>) {
extern "C" {
fn dispatch_suspend(object: NonNull<dispatch_object_s>);
}
unsafe { dispatch_suspend(object) }
}
#[inline]
pub extern "C" fn dispatch_resume(object: NonNull<dispatch_object_s>) {
extern "C" {
fn dispatch_resume(object: NonNull<dispatch_object_s>);
}
unsafe { dispatch_resume(object) }
}
extern "C" {
pub fn dispatch_set_qos_class_floor(
object: NonNull<dispatch_object_s>,
qos_class: DispatchQoS,
relative_priority: c_int,
);
}
impl DispatchQueue {
#[doc(alias = "dispatch_async")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn exec_async_with_block(self: &DispatchQueue, block: dispatch_block_t) {
extern "C" {
fn dispatch_async(queue: &DispatchQueue, block: dispatch_block_t);
}
unsafe { dispatch_async(self, block) }
}
#[doc(alias = "dispatch_async_f")]
#[inline]
pub unsafe fn exec_async_f(
self: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
) {
extern "C" {
fn dispatch_async_f(
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
);
}
unsafe { dispatch_async_f(self, context, work) }
}
#[doc(alias = "dispatch_sync")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn exec_sync_with_block(self: &DispatchQueue, block: dispatch_block_t) {
extern "C" {
fn dispatch_sync(queue: &DispatchQueue, block: dispatch_block_t);
}
unsafe { dispatch_sync(self, block) }
}
#[doc(alias = "dispatch_sync_f")]
#[inline]
pub unsafe fn exec_sync_f(
self: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
) {
extern "C" {
fn dispatch_sync_f(
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
);
}
unsafe { dispatch_sync_f(self, context, work) }
}
#[doc(alias = "dispatch_async_and_wait")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn exec_sync_and_wait_with_block(self: &DispatchQueue, block: dispatch_block_t) {
extern "C" {
fn dispatch_async_and_wait(queue: &DispatchQueue, block: dispatch_block_t);
}
unsafe { dispatch_async_and_wait(self, block) }
}
#[doc(alias = "dispatch_async_and_wait_f")]
#[inline]
pub unsafe fn exec_sync_and_wait_f(
self: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
) {
extern "C" {
fn dispatch_async_and_wait_f(
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
);
}
unsafe { dispatch_async_and_wait_f(self, context, work) }
}
#[doc(alias = "dispatch_apply")]
#[cfg(feature = "block2")]
#[inline]
pub fn apply_with_block(
iterations: usize,
queue: Option<&DispatchQueue>,
block: &block2::DynBlock<dyn Fn(usize)>,
) {
extern "C" {
fn dispatch_apply(
iterations: usize,
queue: Option<&DispatchQueue>,
block: &block2::DynBlock<dyn Fn(usize)>,
);
}
unsafe { dispatch_apply(iterations, queue, block) }
}
#[doc(alias = "dispatch_apply_f")]
#[inline]
pub unsafe fn apply_f(
iterations: usize,
queue: Option<&DispatchQueue>,
context: *mut c_void,
work: unsafe extern "C-unwind" fn(*mut c_void, usize),
) {
extern "C" {
fn dispatch_apply_f(
iterations: usize,
queue: Option<&DispatchQueue>,
context: *mut c_void,
work: unsafe extern "C-unwind" fn(*mut c_void, usize),
);
}
unsafe { dispatch_apply_f(iterations, queue, context, work) }
}
#[doc(alias = "dispatch_get_current_queue")]
#[deprecated = "unsupported interface"]
#[must_use]
#[inline]
pub fn current() -> DispatchRetained<DispatchQueue> {
extern "C" {
fn dispatch_get_current_queue() -> Option<NonNull<DispatchQueue>>;
}
let ret = unsafe { dispatch_get_current_queue() };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::retain(ret) }
}
}
extern "C" {
pub static _dispatch_main_q: DispatchQueue;
}
#[must_use]
#[inline]
pub extern "C" fn dispatch_get_global_queue(
identifier: isize,
flags: usize,
) -> DispatchRetained<DispatchQueue> {
extern "C" {
fn dispatch_get_global_queue(
identifier: isize,
flags: usize,
) -> Option<NonNull<DispatchQueue>>;
}
let ret = unsafe { dispatch_get_global_queue(identifier, flags) };
let ret = ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::retain(ret) }
}
extern "C" {
pub static _dispatch_queue_attr_concurrent: DispatchQueueAttr;
}
impl DispatchQueueAttr {
#[doc(alias = "dispatch_queue_attr_make_initially_inactive")]
#[must_use]
#[inline]
pub fn new_initially_inactive(
attr: Option<&DispatchQueueAttr>,
) -> DispatchRetained<DispatchQueueAttr> {
extern "C" {
fn dispatch_queue_attr_make_initially_inactive(
attr: Option<&DispatchQueueAttr>,
) -> Option<NonNull<DispatchQueueAttr>>;
}
let ret = unsafe { dispatch_queue_attr_make_initially_inactive(attr) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::retain(ret) }
}
}
#[doc(alias = "dispatch_autorelease_frequency_t")] #[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct DispatchAutoReleaseFrequency(pub c_ulong);
impl DispatchAutoReleaseFrequency {
#[doc(alias = "DISPATCH_AUTORELEASE_FREQUENCY_INHERIT")]
pub const INHERIT: Self = Self(0);
#[doc(alias = "DISPATCH_AUTORELEASE_FREQUENCY_WORK_ITEM")]
pub const WORK_ITEM: Self = Self(1);
#[doc(alias = "DISPATCH_AUTORELEASE_FREQUENCY_NEVER")]
pub const NEVER: Self = Self(2);
}
#[cfg(feature = "objc2")]
unsafe impl Encode for DispatchAutoReleaseFrequency {
const ENCODING: Encoding = Encoding::C_ULONG;
}
#[cfg(feature = "objc2")]
unsafe impl RefEncode for DispatchAutoReleaseFrequency {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
impl DispatchQueueAttr {
#[doc(alias = "dispatch_queue_attr_make_with_autorelease_frequency")]
#[must_use]
#[inline]
pub fn with_autorelease_frequency(
attr: Option<&DispatchQueueAttr>,
frequency: DispatchAutoReleaseFrequency,
) -> DispatchRetained<DispatchQueueAttr> {
extern "C" {
fn dispatch_queue_attr_make_with_autorelease_frequency(
attr: Option<&DispatchQueueAttr>,
frequency: DispatchAutoReleaseFrequency,
) -> Option<NonNull<DispatchQueueAttr>>;
}
let ret = unsafe { dispatch_queue_attr_make_with_autorelease_frequency(attr, frequency) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::retain(ret) }
}
#[doc(alias = "dispatch_queue_attr_make_with_qos_class")]
#[must_use]
#[inline]
pub fn with_qos_class(
attr: Option<&DispatchQueueAttr>,
qos_class: DispatchQoS,
relative_priority: c_int,
) -> DispatchRetained<DispatchQueueAttr> {
extern "C" {
fn dispatch_queue_attr_make_with_qos_class(
attr: Option<&DispatchQueueAttr>,
qos_class: DispatchQoS,
relative_priority: c_int,
) -> Option<NonNull<DispatchQueueAttr>>;
}
let ret =
unsafe { dispatch_queue_attr_make_with_qos_class(attr, qos_class, relative_priority) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::retain(ret) }
}
}
impl DispatchQueue {
#[doc(alias = "dispatch_queue_create_with_target")]
#[must_use]
#[inline]
pub(crate) unsafe fn __new_with_target(
label: *const c_char,
attr: Option<&DispatchQueueAttr>,
target: Option<&DispatchQueue>,
) -> DispatchRetained<DispatchQueue> {
extern "C" {
#[cfg_attr(
target_vendor = "apple",
link_name = "dispatch_queue_create_with_target$V2"
)]
fn dispatch_queue_create_with_target(
label: *const c_char,
attr: Option<&DispatchQueueAttr>,
target: Option<&DispatchQueue>,
) -> Option<NonNull<DispatchQueue>>;
}
let ret = unsafe { dispatch_queue_create_with_target(label, attr, target) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_queue_create")]
#[must_use]
#[inline]
pub(crate) unsafe fn __new(
label: *const c_char,
attr: Option<&DispatchQueueAttr>,
) -> DispatchRetained<DispatchQueue> {
extern "C" {
fn dispatch_queue_create(
label: *const c_char,
attr: Option<&DispatchQueueAttr>,
) -> Option<NonNull<DispatchQueue>>;
}
let ret = unsafe { dispatch_queue_create(label, attr) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_queue_get_label")]
#[must_use]
#[inline]
pub fn label(queue: Option<&DispatchQueue>) -> NonNull<c_char> {
extern "C" {
fn dispatch_queue_get_label(queue: Option<&DispatchQueue>) -> Option<NonNull<c_char>>;
}
let ret = unsafe { dispatch_queue_get_label(queue) };
ret.expect("function was marked as returning non-null, but actually returned NULL")
}
#[doc(alias = "dispatch_queue_get_qos_class")]
#[must_use]
#[inline]
pub unsafe fn qos_class(
self: &DispatchQueue,
relative_priority_ptr: *mut c_int,
) -> DispatchQoS {
extern "C" {
fn dispatch_queue_get_qos_class(
queue: &DispatchQueue,
relative_priority_ptr: *mut c_int,
) -> DispatchQoS;
}
unsafe { dispatch_queue_get_qos_class(self, relative_priority_ptr) }
}
}
extern "C" {
pub fn dispatch_set_target_queue(
object: NonNull<dispatch_object_s>,
queue: Option<&DispatchQueue>,
);
}
impl DispatchQueue {
#[doc(alias = "dispatch_after")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn exec_after_with_block(
when: DispatchTime,
queue: &DispatchQueue,
block: dispatch_block_t,
) {
extern "C" {
fn dispatch_after(when: DispatchTime, queue: &DispatchQueue, block: dispatch_block_t);
}
unsafe { dispatch_after(when, queue, block) }
}
#[doc(alias = "dispatch_after_f")]
#[inline]
pub unsafe fn exec_after_f(
when: DispatchTime,
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
) {
extern "C" {
fn dispatch_after_f(
when: DispatchTime,
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
);
}
unsafe { dispatch_after_f(when, queue, context, work) }
}
#[doc(alias = "dispatch_barrier_async")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn barrier_async_with_block(self: &DispatchQueue, block: dispatch_block_t) {
extern "C" {
fn dispatch_barrier_async(queue: &DispatchQueue, block: dispatch_block_t);
}
unsafe { dispatch_barrier_async(self, block) }
}
#[doc(alias = "dispatch_barrier_async_f")]
#[inline]
pub unsafe fn barrier_async_f(
self: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
) {
extern "C" {
fn dispatch_barrier_async_f(
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
);
}
unsafe { dispatch_barrier_async_f(self, context, work) }
}
#[doc(alias = "dispatch_barrier_sync")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn barrier_sync_with_block(self: &DispatchQueue, block: dispatch_block_t) {
extern "C" {
fn dispatch_barrier_sync(queue: &DispatchQueue, block: dispatch_block_t);
}
unsafe { dispatch_barrier_sync(self, block) }
}
#[doc(alias = "dispatch_barrier_sync_f")]
#[inline]
pub unsafe fn barrier_sync_f(
self: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
) {
extern "C" {
fn dispatch_barrier_sync_f(
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
);
}
unsafe { dispatch_barrier_sync_f(self, context, work) }
}
#[doc(alias = "dispatch_barrier_async_and_wait")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn barrier_async_and_wait_with_block(self: &DispatchQueue, block: dispatch_block_t) {
extern "C" {
fn dispatch_barrier_async_and_wait(queue: &DispatchQueue, block: dispatch_block_t);
}
unsafe { dispatch_barrier_async_and_wait(self, block) }
}
#[doc(alias = "dispatch_barrier_async_and_wait_f")]
#[inline]
pub unsafe fn barrier_async_and_wait_f(
self: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
) {
extern "C" {
fn dispatch_barrier_async_and_wait_f(
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
);
}
unsafe { dispatch_barrier_async_and_wait_f(self, context, work) }
}
}
extern "C" {
pub fn dispatch_queue_set_specific(
queue: &DispatchQueue,
key: NonNull<c_void>,
context: *mut c_void,
destructor: dispatch_function_t,
);
}
impl DispatchQueue {
#[doc(alias = "dispatch_queue_get_specific")]
#[must_use]
#[inline]
pub unsafe fn specific(self: &DispatchQueue, key: NonNull<c_void>) -> *mut c_void {
extern "C" {
fn dispatch_queue_get_specific(
queue: &DispatchQueue,
key: NonNull<c_void>,
) -> *mut c_void;
}
unsafe { dispatch_queue_get_specific(self, key) }
}
}
extern "C" {
#[must_use]
pub fn dispatch_get_specific(key: NonNull<c_void>) -> *mut c_void;
}
impl DispatchQueue {
#[doc(alias = "dispatch_assert_queue")]
#[inline]
pub fn assert(self: &DispatchQueue) {
extern "C-unwind" {
#[cfg_attr(target_vendor = "apple", link_name = "dispatch_assert_queue$V2")]
fn dispatch_assert_queue(queue: &DispatchQueue);
}
unsafe { dispatch_assert_queue(self) }
}
#[doc(alias = "dispatch_assert_queue_barrier")]
#[inline]
pub fn assert_barrier(self: &DispatchQueue) {
extern "C-unwind" {
fn dispatch_assert_queue_barrier(queue: &DispatchQueue);
}
unsafe { dispatch_assert_queue_barrier(self) }
}
#[doc(alias = "dispatch_assert_queue_not")]
#[inline]
pub fn assert_not(self: &DispatchQueue) {
extern "C-unwind" {
#[cfg_attr(target_vendor = "apple", link_name = "dispatch_assert_queue_not$V2")]
fn dispatch_assert_queue_not(queue: &DispatchQueue);
}
unsafe { dispatch_assert_queue_not(self) }
}
}
extern "C-unwind" {
pub fn dispatch_allow_send_signals(preserve_signum: c_int) -> c_int;
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct dispatch_block_flags_t(pub c_ulong);
bitflags::bitflags! {
impl dispatch_block_flags_t: c_ulong {
const DISPATCH_BLOCK_BARRIER = 0x1;
const DISPATCH_BLOCK_DETACHED = 0x2;
const DISPATCH_BLOCK_ASSIGN_CURRENT = 0x4;
const DISPATCH_BLOCK_NO_QOS_CLASS = 0x8;
const DISPATCH_BLOCK_INHERIT_QOS_CLASS = 0x10;
const DISPATCH_BLOCK_ENFORCE_QOS_CLASS = 0x20;
}
}
#[cfg(feature = "objc2")]
unsafe impl Encode for dispatch_block_flags_t {
const ENCODING: Encoding = Encoding::C_ULONG;
}
#[cfg(feature = "objc2")]
unsafe impl RefEncode for dispatch_block_flags_t {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
extern "C" {
#[cfg(feature = "block2")]
#[must_use]
pub fn dispatch_block_create(
flags: dispatch_block_flags_t,
block: dispatch_block_t,
) -> dispatch_block_t;
}
extern "C" {
#[cfg(feature = "block2")]
#[must_use]
pub fn dispatch_block_create_with_qos_class(
flags: dispatch_block_flags_t,
qos_class: DispatchQoS,
relative_priority: c_int,
block: dispatch_block_t,
) -> dispatch_block_t;
}
extern "C" {
#[cfg(feature = "block2")]
pub fn dispatch_block_perform(flags: dispatch_block_flags_t, block: dispatch_block_t);
}
extern "C" {
#[cfg(feature = "block2")]
pub fn dispatch_block_wait(block: dispatch_block_t, timeout: DispatchTime) -> isize;
}
extern "C" {
#[cfg(feature = "block2")]
pub fn dispatch_block_notify(
block: dispatch_block_t,
queue: &DispatchQueue,
notification_block: dispatch_block_t,
);
}
extern "C" {
#[cfg(feature = "block2")]
pub fn dispatch_block_cancel(block: dispatch_block_t);
}
extern "C" {
#[cfg(feature = "block2")]
#[must_use]
pub fn dispatch_block_testcancel(block: dispatch_block_t) -> isize;
}
extern "C" {
pub static _dispatch_source_type_data_add: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_data_or: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_data_replace: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_mach_send: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_mach_recv: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_memorypressure: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_proc: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_read: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_signal: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_timer: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_vnode: dispatch_source_type_s;
}
extern "C" {
pub static _dispatch_source_type_write: dispatch_source_type_s;
}
impl DispatchSource {
#[doc(alias = "dispatch_source_create")]
#[must_use]
#[inline]
pub unsafe fn new(
r#type: dispatch_source_type_t,
handle: usize,
mask: usize,
queue: Option<&DispatchQueue>,
) -> DispatchRetained<DispatchSource> {
extern "C" {
fn dispatch_source_create(
r#type: dispatch_source_type_t,
handle: usize,
mask: usize,
queue: Option<&DispatchQueue>,
) -> Option<NonNull<DispatchSource>>;
}
let ret = unsafe { dispatch_source_create(r#type, handle, mask, queue) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_source_set_event_handler")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn set_event_handler_with_block(self: &DispatchSource, handler: dispatch_block_t) {
extern "C" {
fn dispatch_source_set_event_handler(
source: &DispatchSource,
handler: dispatch_block_t,
);
}
unsafe { dispatch_source_set_event_handler(self, handler) }
}
#[doc(alias = "dispatch_source_set_event_handler_f")]
#[inline]
pub fn set_event_handler_f(self: &DispatchSource, handler: dispatch_function_t) {
extern "C" {
fn dispatch_source_set_event_handler_f(
source: &DispatchSource,
handler: dispatch_function_t,
);
}
unsafe { dispatch_source_set_event_handler_f(self, handler) }
}
#[doc(alias = "dispatch_source_set_cancel_handler")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn set_cancel_handler_with_block(self: &DispatchSource, handler: dispatch_block_t) {
extern "C" {
fn dispatch_source_set_cancel_handler(
source: &DispatchSource,
handler: dispatch_block_t,
);
}
unsafe { dispatch_source_set_cancel_handler(self, handler) }
}
#[doc(alias = "dispatch_source_set_cancel_handler_f")]
#[inline]
pub fn set_cancel_handler_f(self: &DispatchSource, handler: dispatch_function_t) {
extern "C" {
fn dispatch_source_set_cancel_handler_f(
source: &DispatchSource,
handler: dispatch_function_t,
);
}
unsafe { dispatch_source_set_cancel_handler_f(self, handler) }
}
#[doc(alias = "dispatch_source_cancel")]
#[inline]
pub fn cancel(self: &DispatchSource) {
extern "C" {
fn dispatch_source_cancel(source: &DispatchSource);
}
unsafe { dispatch_source_cancel(self) }
}
#[doc(alias = "dispatch_source_testcancel")]
#[must_use]
#[inline]
pub fn testcancel(self: &DispatchSource) -> isize {
extern "C" {
fn dispatch_source_testcancel(source: &DispatchSource) -> isize;
}
unsafe { dispatch_source_testcancel(self) }
}
#[doc(alias = "dispatch_source_get_handle")]
#[must_use]
#[inline]
pub fn handle(self: &DispatchSource) -> usize {
extern "C" {
fn dispatch_source_get_handle(source: &DispatchSource) -> usize;
}
unsafe { dispatch_source_get_handle(self) }
}
#[doc(alias = "dispatch_source_get_mask")]
#[must_use]
#[inline]
pub fn mask(self: &DispatchSource) -> usize {
extern "C" {
fn dispatch_source_get_mask(source: &DispatchSource) -> usize;
}
unsafe { dispatch_source_get_mask(self) }
}
#[doc(alias = "dispatch_source_get_data")]
#[must_use]
#[inline]
pub fn data(self: &DispatchSource) -> usize {
extern "C" {
fn dispatch_source_get_data(source: &DispatchSource) -> usize;
}
unsafe { dispatch_source_get_data(self) }
}
#[doc(alias = "dispatch_source_merge_data")]
#[inline]
pub fn merge_data(self: &DispatchSource, value: usize) {
extern "C" {
fn dispatch_source_merge_data(source: &DispatchSource, value: usize);
}
unsafe { dispatch_source_merge_data(self, value) }
}
#[doc(alias = "dispatch_source_set_timer")]
#[inline]
pub fn set_timer(self: &DispatchSource, start: DispatchTime, interval: u64, leeway: u64) {
extern "C" {
fn dispatch_source_set_timer(
source: &DispatchSource,
start: DispatchTime,
interval: u64,
leeway: u64,
);
}
unsafe { dispatch_source_set_timer(self, start, interval, leeway) }
}
#[doc(alias = "dispatch_source_set_registration_handler")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn set_registration_handler_with_block(
self: &DispatchSource,
handler: dispatch_block_t,
) {
extern "C" {
fn dispatch_source_set_registration_handler(
source: &DispatchSource,
handler: dispatch_block_t,
);
}
unsafe { dispatch_source_set_registration_handler(self, handler) }
}
#[doc(alias = "dispatch_source_set_registration_handler_f")]
#[inline]
pub fn set_registration_handler_f(self: &DispatchSource, handler: dispatch_function_t) {
extern "C" {
fn dispatch_source_set_registration_handler_f(
source: &DispatchSource,
handler: dispatch_function_t,
);
}
unsafe { dispatch_source_set_registration_handler_f(self, handler) }
}
}
impl DispatchGroup {
#[doc(alias = "dispatch_group_create")]
#[must_use]
#[inline]
pub fn new() -> DispatchRetained<DispatchGroup> {
extern "C" {
fn dispatch_group_create() -> Option<NonNull<DispatchGroup>>;
}
let ret = unsafe { dispatch_group_create() };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_group_async")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn exec_async_with_block(
self: &DispatchGroup,
queue: &DispatchQueue,
block: dispatch_block_t,
) {
extern "C" {
fn dispatch_group_async(
group: &DispatchGroup,
queue: &DispatchQueue,
block: dispatch_block_t,
);
}
unsafe { dispatch_group_async(self, queue, block) }
}
#[doc(alias = "dispatch_group_async_f")]
#[inline]
pub unsafe fn exec_async_f(
self: &DispatchGroup,
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
) {
extern "C" {
fn dispatch_group_async_f(
group: &DispatchGroup,
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
);
}
unsafe { dispatch_group_async_f(self, queue, context, work) }
}
}
#[inline]
pub extern "C" fn dispatch_group_wait(group: &DispatchGroup, timeout: DispatchTime) -> isize {
extern "C" {
fn dispatch_group_wait(group: &DispatchGroup, timeout: DispatchTime) -> isize;
}
unsafe { dispatch_group_wait(group, timeout) }
}
impl DispatchGroup {
#[doc(alias = "dispatch_group_notify")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn notify_with_block(
self: &DispatchGroup,
queue: &DispatchQueue,
block: dispatch_block_t,
) {
extern "C" {
fn dispatch_group_notify(
group: &DispatchGroup,
queue: &DispatchQueue,
block: dispatch_block_t,
);
}
unsafe { dispatch_group_notify(self, queue, block) }
}
#[doc(alias = "dispatch_group_notify_f")]
#[inline]
pub unsafe fn notify_f(
self: &DispatchGroup,
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
) {
extern "C" {
fn dispatch_group_notify_f(
group: &DispatchGroup,
queue: &DispatchQueue,
context: *mut c_void,
work: dispatch_function_t,
);
}
unsafe { dispatch_group_notify_f(self, queue, context, work) }
}
}
extern "C" {
pub fn dispatch_group_enter(group: &DispatchGroup);
}
impl DispatchGroup {
#[doc(alias = "dispatch_group_leave")]
#[inline]
pub unsafe fn leave(self: &DispatchGroup) {
extern "C" {
fn dispatch_group_leave(group: &DispatchGroup);
}
unsafe { dispatch_group_leave(self) }
}
}
impl DispatchSemaphore {
#[doc(alias = "dispatch_semaphore_create")]
#[must_use]
#[inline]
pub fn new(value: isize) -> DispatchRetained<DispatchSemaphore> {
extern "C" {
fn dispatch_semaphore_create(value: isize) -> Option<NonNull<DispatchSemaphore>>;
}
let ret = unsafe { dispatch_semaphore_create(value) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_semaphore_wait")]
#[inline]
pub fn wait(self: &DispatchSemaphore, timeout: DispatchTime) -> isize {
extern "C" {
fn dispatch_semaphore_wait(dsema: &DispatchSemaphore, timeout: DispatchTime) -> isize;
}
unsafe { dispatch_semaphore_wait(self, timeout) }
}
#[doc(alias = "dispatch_semaphore_signal")]
#[inline]
pub fn signal(self: &DispatchSemaphore) -> isize {
extern "C" {
fn dispatch_semaphore_signal(dsema: &DispatchSemaphore) -> isize;
}
unsafe { dispatch_semaphore_signal(self) }
}
}
pub type dispatch_once_t = isize;
impl DispatchOnce {
#[doc(alias = "dispatch_once")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn once_with_block(predicate: NonNull<dispatch_once_t>, block: dispatch_block_t) {
extern "C" {
fn dispatch_once(predicate: NonNull<dispatch_once_t>, block: dispatch_block_t);
}
unsafe { dispatch_once(predicate, block) }
}
#[doc(alias = "dispatch_once_f")]
#[inline]
pub unsafe fn once_f(
predicate: NonNull<dispatch_once_t>,
context: *mut c_void,
function: dispatch_function_t,
) {
extern "C" {
fn dispatch_once_f(
predicate: NonNull<dispatch_once_t>,
context: *mut c_void,
function: dispatch_function_t,
);
}
unsafe { dispatch_once_f(predicate, context, function) }
}
}
extern "C" {
pub static _dispatch_data_empty: DispatchData;
}
extern "C" {
#[cfg(feature = "block2")]
pub static _dispatch_data_destructor_free: dispatch_block_t;
}
extern "C" {
#[cfg(feature = "block2")]
pub static _dispatch_data_destructor_munmap: dispatch_block_t;
}
impl DispatchData {
#[doc(alias = "dispatch_data_create")]
#[cfg(feature = "block2")]
#[must_use]
#[inline]
pub unsafe fn new(
buffer: NonNull<c_void>,
size: usize,
queue: Option<&DispatchQueue>,
destructor: dispatch_block_t,
) -> DispatchRetained<DispatchData> {
extern "C" {
fn dispatch_data_create(
buffer: NonNull<c_void>,
size: usize,
queue: Option<&DispatchQueue>,
destructor: dispatch_block_t,
) -> Option<NonNull<DispatchData>>;
}
let ret = unsafe { dispatch_data_create(buffer, size, queue, destructor) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_data_get_size")]
#[inline]
pub fn size(self: &DispatchData) -> usize {
extern "C" {
fn dispatch_data_get_size(data: &DispatchData) -> usize;
}
unsafe { dispatch_data_get_size(self) }
}
#[doc(alias = "dispatch_data_create_map")]
#[must_use]
#[inline]
pub unsafe fn map(
self: &DispatchData,
buffer_ptr: *mut *const c_void,
size_ptr: *mut usize,
) -> DispatchRetained<DispatchData> {
extern "C" {
fn dispatch_data_create_map(
data: &DispatchData,
buffer_ptr: *mut *const c_void,
size_ptr: *mut usize,
) -> Option<NonNull<DispatchData>>;
}
let ret = unsafe { dispatch_data_create_map(self, buffer_ptr, size_ptr) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_data_create_concat")]
#[must_use]
#[inline]
pub fn concat(self: &DispatchData, data2: &DispatchData) -> DispatchRetained<DispatchData> {
extern "C" {
fn dispatch_data_create_concat(
data1: &DispatchData,
data2: &DispatchData,
) -> Option<NonNull<DispatchData>>;
}
let ret = unsafe { dispatch_data_create_concat(self, data2) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_data_create_subrange")]
#[must_use]
#[inline]
pub unsafe fn subrange(
self: &DispatchData,
offset: usize,
length: usize,
) -> DispatchRetained<DispatchData> {
extern "C" {
fn dispatch_data_create_subrange(
data: &DispatchData,
offset: usize,
length: usize,
) -> Option<NonNull<DispatchData>>;
}
let ret = unsafe { dispatch_data_create_subrange(self, offset, length) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
}
#[cfg(feature = "block2")]
pub type dispatch_data_applier_t =
*mut block2::DynBlock<dyn Fn(NonNull<DispatchData>, usize, NonNull<c_void>, usize) -> bool>;
impl DispatchData {
#[doc(alias = "dispatch_data_apply")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn apply(self: &DispatchData, applier: dispatch_data_applier_t) -> bool {
extern "C" {
fn dispatch_data_apply(data: &DispatchData, applier: dispatch_data_applier_t) -> bool;
}
unsafe { dispatch_data_apply(self, applier) }
}
#[doc(alias = "dispatch_data_copy_region")]
#[must_use]
#[inline]
pub unsafe fn region(
self: &DispatchData,
location: usize,
offset_ptr: NonNull<usize>,
) -> DispatchRetained<DispatchData> {
extern "C" {
fn dispatch_data_copy_region(
data: &DispatchData,
location: usize,
offset_ptr: NonNull<usize>,
) -> Option<NonNull<DispatchData>>;
}
let ret = unsafe { dispatch_data_copy_region(self, location, offset_ptr) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
}
pub type dispatch_fd_t = c_int;
extern "C" {
#[cfg(feature = "block2")]
pub fn dispatch_read(
fd: dispatch_fd_t,
length: usize,
queue: &DispatchQueue,
handler: &block2::DynBlock<dyn Fn(NonNull<DispatchData>, c_int)>,
);
}
extern "C" {
#[cfg(feature = "block2")]
pub fn dispatch_write(
fd: dispatch_fd_t,
data: &DispatchData,
queue: &DispatchQueue,
handler: &block2::DynBlock<dyn Fn(*mut DispatchData, c_int)>,
);
}
impl DispatchIO {
#[doc(alias = "dispatch_io_create")]
#[cfg(feature = "block2")]
#[must_use]
#[inline]
pub unsafe fn new(
r#type: DispatchIOStreamType,
fd: dispatch_fd_t,
queue: &DispatchQueue,
cleanup_handler: &block2::DynBlock<dyn Fn(c_int)>,
) -> DispatchRetained<DispatchIO> {
extern "C" {
fn dispatch_io_create(
r#type: DispatchIOStreamType,
fd: dispatch_fd_t,
queue: &DispatchQueue,
cleanup_handler: &block2::DynBlock<dyn Fn(c_int)>,
) -> Option<NonNull<DispatchIO>>;
}
let ret = unsafe { dispatch_io_create(r#type, fd, queue, cleanup_handler) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_io_create_with_path")]
#[cfg(all(feature = "block2", feature = "libc"))]
#[must_use]
#[inline]
pub unsafe fn with_path(
r#type: DispatchIOStreamType,
path: NonNull<c_char>,
oflag: c_int,
mode: libc::mode_t,
queue: &DispatchQueue,
cleanup_handler: &block2::DynBlock<dyn Fn(c_int)>,
) -> DispatchRetained<DispatchIO> {
extern "C" {
fn dispatch_io_create_with_path(
r#type: DispatchIOStreamType,
path: NonNull<c_char>,
oflag: c_int,
mode: libc::mode_t,
queue: &DispatchQueue,
cleanup_handler: &block2::DynBlock<dyn Fn(c_int)>,
) -> Option<NonNull<DispatchIO>>;
}
let ret = unsafe {
dispatch_io_create_with_path(r#type, path, oflag, mode, queue, cleanup_handler)
};
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_io_create_with_io")]
#[cfg(feature = "block2")]
#[must_use]
#[inline]
pub fn with_io(
r#type: DispatchIOStreamType,
io: &DispatchIO,
queue: &DispatchQueue,
cleanup_handler: &block2::DynBlock<dyn Fn(c_int)>,
) -> DispatchRetained<DispatchIO> {
extern "C" {
fn dispatch_io_create_with_io(
r#type: DispatchIOStreamType,
io: &DispatchIO,
queue: &DispatchQueue,
cleanup_handler: &block2::DynBlock<dyn Fn(c_int)>,
) -> Option<NonNull<DispatchIO>>;
}
let ret = unsafe { dispatch_io_create_with_io(r#type, io, queue, cleanup_handler) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
}
#[cfg(feature = "block2")]
pub type dispatch_io_handler_t = *mut block2::DynBlock<dyn Fn(bool, *mut DispatchData, c_int)>;
impl DispatchIO {
#[doc(alias = "dispatch_io_read")]
#[cfg(all(feature = "block2", feature = "libc"))]
#[inline]
pub unsafe fn read(
self: &DispatchIO,
offset: libc::off_t,
length: usize,
queue: &DispatchQueue,
io_handler: dispatch_io_handler_t,
) {
extern "C" {
fn dispatch_io_read(
channel: &DispatchIO,
offset: libc::off_t,
length: usize,
queue: &DispatchQueue,
io_handler: dispatch_io_handler_t,
);
}
unsafe { dispatch_io_read(self, offset, length, queue, io_handler) }
}
#[doc(alias = "dispatch_io_write")]
#[cfg(all(feature = "block2", feature = "libc"))]
#[inline]
pub unsafe fn write(
self: &DispatchIO,
offset: libc::off_t,
data: &DispatchData,
queue: &DispatchQueue,
io_handler: dispatch_io_handler_t,
) {
extern "C" {
fn dispatch_io_write(
channel: &DispatchIO,
offset: libc::off_t,
data: &DispatchData,
queue: &DispatchQueue,
io_handler: dispatch_io_handler_t,
);
}
unsafe { dispatch_io_write(self, offset, data, queue, io_handler) }
}
#[doc(alias = "dispatch_io_close")]
#[inline]
pub fn close(self: &DispatchIO, flags: DispatchIOCloseFlags) {
extern "C" {
fn dispatch_io_close(channel: &DispatchIO, flags: DispatchIOCloseFlags);
}
unsafe { dispatch_io_close(self, flags) }
}
#[doc(alias = "dispatch_io_barrier")]
#[cfg(feature = "block2")]
#[inline]
pub unsafe fn barrier(self: &DispatchIO, barrier: dispatch_block_t) {
extern "C" {
fn dispatch_io_barrier(channel: &DispatchIO, barrier: dispatch_block_t);
}
unsafe { dispatch_io_barrier(self, barrier) }
}
#[doc(alias = "dispatch_io_get_descriptor")]
#[must_use]
#[inline]
pub fn descriptor(self: &DispatchIO) -> dispatch_fd_t {
extern "C" {
fn dispatch_io_get_descriptor(channel: &DispatchIO) -> dispatch_fd_t;
}
unsafe { dispatch_io_get_descriptor(self) }
}
#[doc(alias = "dispatch_io_set_high_water")]
#[inline]
pub fn set_high_water(self: &DispatchIO, high_water: usize) {
extern "C" {
fn dispatch_io_set_high_water(channel: &DispatchIO, high_water: usize);
}
unsafe { dispatch_io_set_high_water(self, high_water) }
}
#[doc(alias = "dispatch_io_set_low_water")]
#[inline]
pub fn set_low_water(self: &DispatchIO, low_water: usize) {
extern "C" {
fn dispatch_io_set_low_water(channel: &DispatchIO, low_water: usize);
}
unsafe { dispatch_io_set_low_water(self, low_water) }
}
#[doc(alias = "dispatch_io_set_interval")]
#[inline]
pub fn set_interval(self: &DispatchIO, interval: u64, flags: DispatchIOIntervalFlags) {
extern "C" {
fn dispatch_io_set_interval(
channel: &DispatchIO,
interval: u64,
flags: DispatchIOIntervalFlags,
);
}
unsafe { dispatch_io_set_interval(self, interval, flags) }
}
}
impl DispatchWorkloop {
#[doc(alias = "dispatch_workloop_create")]
#[must_use]
#[inline]
pub(crate) unsafe fn __new(label: *const c_char) -> DispatchRetained<DispatchWorkloop> {
extern "C" {
fn dispatch_workloop_create(label: *const c_char) -> Option<NonNull<DispatchWorkloop>>;
}
let ret = unsafe { dispatch_workloop_create(label) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_workloop_create_inactive")]
#[must_use]
#[inline]
pub(crate) unsafe fn __new_inactive(
label: *const c_char,
) -> DispatchRetained<DispatchWorkloop> {
extern "C" {
fn dispatch_workloop_create_inactive(
label: *const c_char,
) -> Option<NonNull<DispatchWorkloop>>;
}
let ret = unsafe { dispatch_workloop_create_inactive(label) };
let ret =
ret.expect("function was marked as returning non-null, but actually returned NULL");
unsafe { DispatchRetained::from_raw(ret) }
}
#[doc(alias = "dispatch_workloop_set_autorelease_frequency")]
#[inline]
pub fn set_autorelease_frequency(
self: &DispatchWorkloop,
frequency: DispatchAutoReleaseFrequency,
) {
extern "C" {
fn dispatch_workloop_set_autorelease_frequency(
workloop: &DispatchWorkloop,
frequency: DispatchAutoReleaseFrequency,
);
}
unsafe { dispatch_workloop_set_autorelease_frequency(self, frequency) }
}
}