pub use skl::{
options::{CompressionPolicy, Freelist},
Height, KeySize,
};
use skl::Options as SklOptions;
use super::sealed::Constructable;
#[derive(Debug, Clone, Copy)]
pub struct Options {
capacity: u32,
maximum_height: Height,
maximum_key_size: KeySize,
maximum_value_size: u32,
freelist: Freelist,
policy: CompressionPolicy,
reserved: u32,
}
impl Default for Options {
#[inline]
fn default() -> Self {
Self::new()
}
}
impl Options {
#[inline]
pub const fn new() -> Self {
Self {
capacity: 8 * 1024 * 1024, maximum_height: Height::new(),
maximum_key_size: KeySize::new(),
maximum_value_size: u32::MAX,
freelist: Freelist::None,
policy: CompressionPolicy::Fast,
reserved: 0,
}
}
#[inline]
pub const fn with_capacity(mut self, capacity: u32) -> Self {
self.capacity = capacity;
self
}
#[inline]
pub const fn capacity(&self) -> u32 {
self.capacity
}
#[inline]
pub const fn with_maximum_height(mut self, maximum_height: Height) -> Self {
self.maximum_height = maximum_height;
self
}
#[inline]
pub const fn maximum_height(&self) -> Height {
self.maximum_height
}
#[inline]
pub const fn with_maximum_key_size(mut self, maximum_key_size: KeySize) -> Self {
self.maximum_key_size = maximum_key_size;
self
}
#[inline]
pub const fn maximum_key_size(&self) -> KeySize {
self.maximum_key_size
}
#[inline]
pub const fn with_maximum_value_size(mut self, maximum_value_size: u32) -> Self {
self.maximum_value_size = maximum_value_size;
self
}
#[inline]
pub const fn maximum_value_size(&self) -> u32 {
self.maximum_value_size
}
#[inline]
pub const fn with_freelist(mut self, freelist: Freelist) -> Self {
self.freelist = freelist;
self
}
#[inline]
pub const fn freelist(&self) -> Freelist {
self.freelist
}
#[inline]
pub const fn with_compression_policy(mut self, policy: CompressionPolicy) -> Self {
self.policy = policy;
self
}
#[inline]
pub const fn compression_policy(&self) -> CompressionPolicy {
self.policy
}
#[inline]
pub const fn with_reserved(mut self, reserved: u32) -> Self {
self.reserved = reserved;
self
}
#[inline]
pub const fn reserved(&self) -> u32 {
self.reserved
}
#[inline]
pub fn alloc<M>(self) -> Result<M, skl::error::Error>
where
M: Constructable,
{
M::construct(self)
}
#[cfg(all(feature = "memmap", not(target_family = "wasm")))]
#[cfg_attr(docsrs, doc(cfg(all(feature = "memmap", not(target_family = "wasm")))))]
#[inline]
pub fn map_anon<M>(self) -> std::io::Result<M>
where
M: Constructable,
{
M::map_anon(self)
}
#[allow(clippy::wrong_self_convention)]
#[inline]
pub(super) fn to_skl_options(&self) -> SklOptions {
SklOptions::new()
.with_capacity(self.capacity)
.with_max_height(self.maximum_height)
.with_max_key_size(self.maximum_key_size)
.with_max_value_size(self.maximum_value_size)
.with_freelist(self.freelist)
.with_compression_policy(self.policy)
.with_reserved(self.reserved)
}
}