#![cfg_attr(nightly, feature(allocator_api))]
#![cfg_attr(nightly, feature(trusted_len))]
#![warn(clippy::pedantic)]
#![allow(clippy::cast_ptr_alignment)]
#![allow(clippy::inline_always)]
#![allow(clippy::needless_pass_by_value)]
#![doc = include_str!(concat!(env!("OUT_DIR"), "/README-rustdocified.md"))]
#![cfg_attr(not(feature = "std"), no_std)]

// INVARIANT: `layout.size()` is a multiple of `layout.align()`, in
// all layouts passed to the internal allocation routines.
//
// Layouts are either constructed from `Layout::new::<T>()` or
// `Layout::array::<T>(len)`, which uphold this invariant, or are
// caller-provided layouts normalized with `Layout::pad_to_align()`.
//
// The Rust language guarantees `size_of::<T>() % align_of::<T>() == 0`
// for all types (<https://doc.rust-lang.org/reference/type-layout.html>).

#[doc(hidden)]
extern crate alloc as core_alloc;

mod arena;
mod arena_ref;
mod chunk;
mod errors;
mod limits;

pub use arena::*;
pub use arena_ref::*;
pub use chunk::*;
pub use errors::Error;
