// Copyright 2013-2015 The Servo Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. use crate::string::CFStringRef; use std::cmp::Ordering; use std::os::raw::{c_int, c_short, c_uchar, c_uint, c_ushort, c_void}; pub type Boolean = u8; pub type mach_port_t = c_uint; pub type CFAllocatorRef = *const c_void; pub type CFNullRef = *const c_void; pub type CFTypeRef = *const c_void; pub type ConstStr255Param = *const c_uchar; pub type StringPtr = *mut c_uchar; pub type ConstStringPtr = *const c_uchar; pub type OSStatus = i32; pub type UInt8 = c_uchar; pub type UInt16 = c_ushort; pub type SInt16 = c_short; pub type SInt32 = c_int; pub type UInt32 = c_uint; pub type CFTypeID = usize; pub type CFOptionFlags = usize; pub type CFHashCode = usize; pub type CFIndex = isize; pub type LangCode = SInt16; pub type RegionCode = SInt16; pub type UTF32Char = c_uint; pub type UTF16Char = c_ushort; pub type UTF8Char = c_uchar; #[repr(isize)] #[derive(Clone, Copy, Debug, PartialEq)] pub enum CFComparisonResult { LessThan = -1, EqualTo = 0, GreaterThan = 1, } pub type CFComparatorFunction = extern "C" fn( val1: *const c_void, val2: *const c_void, context: *mut c_void, ) -> CFComparisonResult; impl From for Ordering { fn from(val: CFComparisonResult) -> Self { match val { CFComparisonResult::LessThan => Ordering::Less, CFComparisonResult::EqualTo => Ordering::Equal, CFComparisonResult::GreaterThan => Ordering::Greater, } } } #[repr(C)] #[derive(Clone, Copy, Debug, PartialEq)] pub struct CFRange { pub location: CFIndex, pub length: CFIndex, } // for back-compat impl CFRange { pub fn init(location: CFIndex, length: CFIndex) -> CFRange { CFRange { location, length } } } pub type CFAllocatorRetainCallBack = extern "C" fn(info: *mut c_void) -> *mut c_void; pub type CFAllocatorReleaseCallBack = extern "C" fn(info: *mut c_void); pub type CFAllocatorCopyDescriptionCallBack = extern "C" fn(info: *mut c_void) -> CFStringRef; pub type CFAllocatorAllocateCallBack = extern "C" fn(allocSize: CFIndex, hint: CFOptionFlags, info: *mut c_void) -> *mut c_void; pub type CFAllocatorReallocateCallBack = extern "C" fn( ptr: *mut c_void, newsize: CFIndex, hint: CFOptionFlags, info: *mut c_void, ) -> *mut c_void; pub type CFAllocatorDeallocateCallBack = extern "C" fn(ptr: *mut c_void, info: *mut c_void); pub type CFAllocatorPreferredSizeCallBack = extern "C" fn(size: CFIndex, hint: CFOptionFlags, info: *mut c_void) -> CFIndex; #[repr(C)] #[derive(Clone, Copy, Debug)] pub struct CFAllocatorContext { pub version: CFIndex, pub info: *mut c_void, pub retain: Option, pub release: Option, pub copyDescription: Option, pub allocate: Option, pub reallocate: Option, pub deallocate: Option, pub preferredSize: Option, } /// Trait for all types which are Core Foundation reference types. pub trait TCFTypeRef { fn as_void_ptr(&self) -> *const c_void; unsafe fn from_void_ptr(ptr: *const c_void) -> Self; } impl TCFTypeRef for *const T { fn as_void_ptr(&self) -> *const c_void { (*self) as *const c_void } unsafe fn from_void_ptr(ptr: *const c_void) -> Self { ptr as *const T } } impl TCFTypeRef for *mut T { fn as_void_ptr(&self) -> *const c_void { (*self) as *const T as *const c_void } unsafe fn from_void_ptr(ptr: *const c_void) -> Self { ptr as *const T as *mut T } } /// Constant used by some functions to indicate failed searches. pub static kCFNotFound: CFIndex = -1; extern "C" { /* * CFBase.h */ /* CFAllocator Reference */ pub static kCFAllocatorDefault: CFAllocatorRef; pub static kCFAllocatorSystemDefault: CFAllocatorRef; pub static kCFAllocatorMalloc: CFAllocatorRef; pub static kCFAllocatorMallocZone: CFAllocatorRef; pub static kCFAllocatorNull: CFAllocatorRef; pub static kCFAllocatorUseContext: CFAllocatorRef; pub fn CFAllocatorCreate( allocator: CFAllocatorRef, context: *mut CFAllocatorContext, ) -> CFAllocatorRef; pub fn CFAllocatorAllocate( allocator: CFAllocatorRef, size: CFIndex, hint: CFOptionFlags, ) -> *mut c_void; pub fn CFAllocatorDeallocate(allocator: CFAllocatorRef, ptr: *mut c_void); pub fn CFAllocatorGetPreferredSizeForSize( allocator: CFAllocatorRef, size: CFIndex, hint: CFOptionFlags, ) -> CFIndex; pub fn CFAllocatorReallocate( allocator: CFAllocatorRef, ptr: *mut c_void, newsize: CFIndex, hint: CFOptionFlags, ) -> *mut c_void; pub fn CFAllocatorGetDefault() -> CFAllocatorRef; pub fn CFAllocatorSetDefault(allocator: CFAllocatorRef); pub fn CFAllocatorGetContext(allocator: CFAllocatorRef, context: *mut CFAllocatorContext); pub fn CFAllocatorGetTypeID() -> CFTypeID; /* CFNull Reference */ pub static kCFNull: CFNullRef; pub fn CFNullGetTypeID() -> CFTypeID; /* CFType Reference */ pub fn CFCopyTypeIDDescription(type_id: CFTypeID) -> CFStringRef; pub fn CFGetAllocator(cf: CFTypeRef) -> CFAllocatorRef; pub fn CFCopyDescription(cf: CFTypeRef) -> CFStringRef; pub fn CFEqual(cf1: CFTypeRef, cf2: CFTypeRef) -> Boolean; pub fn CFGetRetainCount(cf: CFTypeRef) -> CFIndex; pub fn CFGetTypeID(cf: CFTypeRef) -> CFTypeID; pub fn CFHash(cf: CFTypeRef) -> CFHashCode; //fn CFMakeCollectable pub fn CFRelease(cf: CFTypeRef); pub fn CFRetain(cf: CFTypeRef) -> CFTypeRef; pub fn CFShow(obj: CFTypeRef); /* Base Utilities Reference */ // N.B. Some things missing here. }