use std::io;
use crate::{Blocks, BlocksAllocator};
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub struct Void {
block_count: u64,
block_shift: u32,
}
impl Void {
#[inline(always)]
#[must_use]
pub fn new(block_count: u64, block_shift: u32) -> Void {
Self {
block_count,
block_shift,
}
}
}
impl Blocks for Void {
#[inline(always)]
fn block_count(&self) -> u64 {
self.block_count
}
#[inline(always)]
fn block_shift(&self) -> u32 {
self.block_shift
}
#[inline(always)]
fn load_from(&mut self, _block: u64, _bufs: &mut [io::IoSliceMut<'_>]) -> io::Result<()> {
Ok(())
}
#[inline(always)]
fn store_at(&mut self, _block: u64, _bufs: &mut [io::IoSlice<'_>]) -> io::Result<()> {
Ok(())
}
}
unsafe impl BlocksAllocator for Void {
type Blocks = Void;
#[inline(always)]
fn alloc(&self) -> io::Result<Void> {
Ok(*self)
}
#[inline(always)]
fn release(&self, blocks: Void) -> Result<(), (Void, io::Error)> {
assert_eq!(blocks, *self);
Ok(())
}
#[inline(always)]
fn retrieve(&self, _f: impl FnMut(Void)) -> io::Result<()> {
Ok(())
}
}