Source code
Revision control
Copy as Markdown
Other Tools
mod hb;
use hb::*;
#[cfg(feature = "font")]
mod font;
#[cfg(feature = "shape")]
mod shape;
use std::alloc::{GlobalAlloc, Layout};
use std::os::raw::c_void;
struct MyAllocator;
unsafe impl GlobalAlloc for MyAllocator {
unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
assert!(layout.align() <= 2 * std::mem::size_of::<*mut u8>());
hb_malloc(layout.size()) as *mut u8
}
unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
assert!(layout.align() <= 2 * std::mem::size_of::<*mut u8>());
hb_calloc(layout.size(), 1) as *mut u8
}
unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
assert!(layout.align() <= 2 * std::mem::size_of::<*mut u8>());
hb_realloc(ptr as *mut c_void, new_size) as *mut u8
}
unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
assert!(layout.align() <= 2 * std::mem::size_of::<*mut u8>());
hb_free(ptr as *mut c_void);
}
}
#[global_allocator]
static GLOBAL: MyAllocator = MyAllocator;