pub(crate) mod memory_pool;
mod base;
pub mod drop_queue;
pub use base::*;
mod memory_manage;
pub use memory_manage::*;
mod adaptive;
use alloc::vec::Vec;
#[derive(Debug, Clone)]
pub enum PoolType {
ExclusivePages {
max_alloc_size: u64,
},
SlicedPages {
page_size: u64,
max_slice_size: u64,
},
}
#[derive(Debug, Clone)]
pub struct MemoryPoolOptions {
pub pool_type: PoolType,
pub dealloc_period: Option<u64>,
}
#[derive(Clone, Debug)]
pub enum MemoryConfiguration {
#[cfg(not(exclusive_memory_only))]
Adaptive,
#[cfg(not(exclusive_memory_only))]
SubSlices,
ExclusivePages,
Custom {
pool_options: Vec<MemoryPoolOptions>,
},
}
#[allow(clippy::derivable_impls)]
impl Default for MemoryConfiguration {
fn default() -> Self {
#[cfg(exclusive_memory_only)]
{
MemoryConfiguration::ExclusivePages
}
#[cfg(not(exclusive_memory_only))]
{
MemoryConfiguration::SubSlices
}
}
}
impl MemoryConfiguration {
pub fn is_adaptive(&self) -> bool {
#[cfg(not(exclusive_memory_only))]
{ matches!(self, Self::Adaptive) }
#[cfg(exclusive_memory_only)]
{ false }
}
pub fn uses_subslices(&self) -> bool {
#[cfg(not(exclusive_memory_only))]
{ matches!(self, Self::SubSlices | Self::Adaptive) }
#[cfg(exclusive_memory_only)]
{ false }
}
}