pub const DEFAULT_MAX_RETAINED_ROWS: usize = 65_536;
pub const DEFAULT_MAX_RETAINED_BYTES: usize = 8 * 1024 * 1024;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct BufferPolicy {
pub max_retained_rows: usize,
pub max_retained_bytes: usize,
}
impl BufferPolicy {
pub const fn new(max_retained_rows: usize, max_retained_bytes: usize) -> Self {
Self {
max_retained_rows,
max_retained_bytes,
}
}
pub const fn unbounded() -> Self {
Self::new(usize::MAX, usize::MAX)
}
pub const fn zero() -> Self {
Self::new(0, 0)
}
pub const fn should_shrink(&self, row_capacity: usize, allocated_bytes: usize) -> bool {
row_capacity > self.max_retained_rows || allocated_bytes > self.max_retained_bytes
}
}
impl Default for BufferPolicy {
fn default() -> Self {
Self::new(DEFAULT_MAX_RETAINED_ROWS, DEFAULT_MAX_RETAINED_BYTES)
}
}
pub type BufferRetentionPolicy = BufferPolicy;
pub trait MemoryBuffer {
fn allocated_bytes(&self) -> usize;
fn row_capacity(&self) -> usize;
fn clear_with_policy(&mut self, policy: BufferPolicy);
fn clear(&mut self) {
self.clear_with_policy(BufferPolicy::default());
}
fn clear_unbounded(&mut self) {
self.clear_with_policy(BufferPolicy::unbounded());
}
fn shrink_to_fit(&mut self);
}