use super::super::opaque_pointee::opaque_pointee;
use core::mem::align_of;
use core::ptr::NonNull;
opaque_pointee!(upb_Arena);
pub type RawArena = NonNull<upb_Arena>;
pub const UPB_MALLOC_ALIGN: usize = 8;
const _CHECK_UPB_MALLOC_ALIGN_AT_LEAST_POINTER_ALIGNED: () =
assert!(UPB_MALLOC_ALIGN >= align_of::<*const ()>());
extern "C" {
pub fn upb_Arena_New() -> Option<RawArena>;
pub fn upb_Arena_Free(arena: RawArena);
pub fn upb_Arena_Malloc(arena: RawArena, size: usize) -> *mut u8;
pub fn upb_Arena_Fuse(arena1: RawArena, arena2: RawArena) -> bool;
}
#[cfg(test)]
mod tests {
use super::*;
use googletest::gtest;
#[gtest]
fn assert_arena_linked() {
use crate::assert_linked;
assert_linked!(upb_Arena_New);
assert_linked!(upb_Arena_Free);
assert_linked!(upb_Arena_Malloc);
assert_linked!(upb_Arena_Fuse);
}
#[gtest]
fn raw_ffi_test() {
unsafe {
let arena = upb_Arena_New().unwrap();
let bytes = upb_Arena_Malloc(arena, 3);
*bytes.add(2) = 7;
upb_Arena_Free(arena);
}
}
}