use std::os::raw::c_void;
use base::{CFIndex, CFTypeID, CFAllocatorRef, CFComparatorFunction};
use string::CFStringRef;
#[repr(C)]
pub struct __CFTree(c_void);
pub type CFTreeRef = *mut __CFTree;
pub type CFTreeRetainCallBack = extern "C" fn (info: *const c_void) -> *const c_void;
pub type CFTreeReleaseCallBack = extern "C" fn (info: *const c_void);
pub type CFTreeCopyDescriptionCallBack = extern "C" fn (info: *const c_void) -> CFStringRef;
pub type CFTreeApplierFunction = extern "C" fn (value: *const c_void, context: *mut c_void);
#[repr(C)]
pub struct CFTreeContext {
pub version: CFIndex,
pub info: *mut c_void,
pub retain: CFTreeRetainCallBack,
pub release: CFTreeReleaseCallBack,
pub copyDescription: CFTreeCopyDescriptionCallBack
}
extern {
pub fn CFTreeCreate(allocator: CFAllocatorRef, context: *const CFTreeContext) -> CFTreeRef;
pub fn CFTreeAppendChild(tree: CFTreeRef, newChild: CFTreeRef);
pub fn CFTreeInsertSibling(tree: CFTreeRef, newSibling: CFTreeRef);
pub fn CFTreeRemoveAllChildren(tree: CFTreeRef);
pub fn CFTreePrependChild(tree: CFTreeRef, newChild: CFTreeRef);
pub fn CFTreeRemove(tree: CFTreeRef);
pub fn CFTreeSetContext(tree: CFTreeRef, context: *const CFTreeContext);
pub fn CFTreeSortChildren(tree: CFTreeRef, comparator: CFComparatorFunction, context: *mut c_void);
pub fn CFTreeFindRoot(tree: CFTreeRef) -> CFTreeRef;
pub fn CFTreeGetChildAtIndex(tree: CFTreeRef, idx: CFIndex) -> CFTreeRef;
pub fn CFTreeGetChildCount(tree: CFTreeRef) -> CFIndex;
pub fn CFTreeGetChildren(tree: CFTreeRef, children: *mut CFTreeRef);
pub fn CFTreeGetContext(tree: CFTreeRef, context: *mut CFTreeContext);
pub fn CFTreeGetFirstChild(tree: CFTreeRef) -> CFTreeRef;
pub fn CFTreeGetNextSibling(tree: CFTreeRef) -> CFTreeRef;
pub fn CFTreeGetParent(tree: CFTreeRef) -> CFTreeRef;
pub fn CFTreeApplyFunctionToChildren(tree: CFTreeRef, applier: CFTreeApplierFunction, context: *mut c_void);
pub fn CFTreeGetTypeID() -> CFTypeID;
}