| 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; |