#![no_std]
#![allow(unused_unsafe)]
extern crate alloc as std_alloc;
mod alloc_alloc; mod core_alloc;
pub mod alloc {
pub use crate::alloc_alloc::Global;
pub use crate::core_alloc::{AllocError, Allocator};
}
pub mod collections;
use core::hint::unreachable_unchecked;
use core::mem::MaybeUninit;
use core::ptr::NonNull;
use std_alloc::alloc::Layout;
fn nonnull_as_mut_ptr<T>(ptr: NonNull<[T]>) -> *mut T {
ptr.as_ptr() as *mut T
}
unsafe fn nonnull_len<T>(ptr: NonNull<[T]>) -> usize {
let uninit_ptr = core::mem::transmute::<NonNull<[T]>, NonNull<[MaybeUninit<T>]>>(ptr);
(*uninit_ptr.as_ptr()).len()
}
fn nonnull_slice_from_raw_parts<T>(data: NonNull<T>, len: usize) -> NonNull<[T]> {
unsafe { NonNull::new_unchecked(core::ptr::slice_from_raw_parts_mut(data.as_ptr(), len)) }
}
fn invalid_mut<T>(addr: usize) -> *mut T {
unsafe { core::mem::transmute(addr) }
}
fn layout_dangling(slf: &Layout) -> NonNull<u8> {
unsafe { NonNull::new_unchecked(invalid_mut(slf.align())) }
}
unsafe fn assume(b: bool) {
if !b {
unreachable_unchecked()
}
}