#![doc = include_str!("../README.md")]
#![cfg_attr(not(any(test, feature = "error-scanning-std")), no_std)]
#![cfg_attr(feature = "nightly", feature(allocator_api))]
#![cfg_attr(docsrs, feature(doc_cfg))]
#![warn(missing_docs)]
#![allow(type_alias_bounds)]
#[cfg(test)]
#[macro_use]
mod test_utils;
pub(crate) mod node;
pub(crate) mod ptr_utils;
pub mod base;
pub mod cell;
pub mod source;
pub mod sync;
pub mod wasm;
pub use base::binning::DefaultBinning;
pub type TalcCell<S: source::Source> = cell::TalcCell<S, base::binning::DefaultBinning>;
pub type TalcLock<R: lock_api::RawMutex, S: source::Source> =
sync::TalcLock<R, S, base::binning::DefaultBinning>;
pub const fn min_first_heap_size<B: base::binning::Binning>() -> usize {
let size =
base::chunk::required_chunk_size(B::BIN_COUNT as usize * core::mem::size_of::<*mut u8>());
let max_overhead = crate::base::CHUNK_UNIT + core::mem::align_of::<usize>() - 1;
size + max_overhead
}
pub const fn min_first_heap_layout<B: base::binning::Binning>() -> ::core::alloc::Layout {
let size = B::BIN_COUNT as usize * core::mem::size_of::<usize>();
let max_overhead = crate::base::CHUNK_UNIT;
unsafe {
::core::alloc::Layout::from_size_align_unchecked(
size + max_overhead,
core::mem::align_of::<usize>(),
)
}
}