#[cfg(any(doc, not(feature = "unstable-objfw")))]
use core::ffi::c_char;
use core::ffi::c_int;
#[cfg(any(doc, target_vendor = "apple"))]
use core::ffi::c_uint;
use core::ffi::c_void;
use crate::runtime::AnyObject;
use crate::runtime::Imp;
#[cfg(any(doc, not(feature = "unstable-objfw")))]
use crate::{
ffi::objc_AssociationPolicy,
runtime::{Bool, Ivar},
};
extern_c_unwind! {
#[cfg(any(doc, target_vendor = "apple", feature = "unstable-objfw"))]
pub fn objc_enumerationMutation(obj: *mut AnyObject);
}
extern_c! {
#[cfg(any(doc, not(feature = "unstable-objfw")))]
pub fn imp_getBlock(imp: Imp) -> *mut AnyObject;
#[cfg(any(doc, not(feature = "unstable-objfw")))]
pub fn imp_implementationWithBlock(block: *mut AnyObject) -> Imp;
#[cfg(any(doc, not(feature = "unstable-objfw")))]
pub fn imp_removeBlock(imp: Imp) -> Bool;
#[cfg(any(doc, not(feature = "unstable-objfw")))]
pub fn ivar_getName(ivar: *const Ivar) -> *const c_char;
#[cfg(any(doc, not(feature = "unstable-objfw")))]
pub fn ivar_getOffset(ivar: *const Ivar) -> isize;
#[cfg(any(doc, not(feature = "unstable-objfw")))]
pub fn ivar_getTypeEncoding(ivar: *const Ivar) -> *const c_char;
#[cfg(any(doc, target_vendor = "apple"))]
pub fn objc_copyClassNamesForImage(
image: *const c_char,
out_len: *mut c_uint,
) -> *mut *const c_char;
#[cfg(any(doc, target_vendor = "apple"))]
pub fn objc_copyImageNames(out_len: *mut c_uint) -> *mut *const c_char;
#[cfg(any(doc, target_vendor = "apple", feature = "unstable-objfw"))]
pub fn objc_setEnumerationMutationHandler(
handler: Option<unsafe extern "C-unwind" fn(obj: *mut AnyObject)>,
);
#[cfg(any(doc, not(feature = "unstable-objfw")))]
pub fn objc_getAssociatedObject(
object: *const AnyObject,
key: *const c_void,
) -> *const AnyObject;
#[cfg(any(doc, not(feature = "unstable-objfw")))]
pub fn objc_setAssociatedObject(
object: *mut AnyObject,
key: *const c_void,
value: *mut AnyObject,
policy: objc_AssociationPolicy,
);
#[cfg(any(doc, not(feature = "unstable-objfw")))]
pub fn objc_removeAssociatedObjects(object: *mut AnyObject);
#[cfg(any(doc, target_vendor = "apple", feature = "unstable-objfw"))]
pub fn objc_setForwardHandler(fwd: *mut c_void, fwd_stret: *mut c_void);
pub fn objc_sync_enter(obj: *mut AnyObject) -> c_int;
pub fn objc_sync_exit(obj: *mut AnyObject) -> c_int;
}