block-db 0.2.0

Local, multi-threaded, durable byte DB.
Documentation
// Authors: Robert Lopez

use crate::data_file::DataFile;
use rand::{rng, Rng, RngCore};

pub fn size_bytes(bytes: &[u8], chunk_size: usize) -> usize {
    chunk_size * (bytes.len() as f64 / chunk_size as f64).ceil() as usize
}

pub fn random_bytes(n: usize) -> Vec<u8> {
    let mut bytes = vec![0; n];
    rng().fill_bytes(&mut bytes);

    bytes
}

pub fn random_max_file_size(base: usize) -> usize {
    base + ((base as f64 * rng().random_range(0.05..1.05)) as usize)
}

impl DataFile {
    pub(crate) fn free_chunk_count(&self) -> usize {
        self.free_chunk_offsets.len()
    }

    pub(crate) fn used_chunk_count(&self) -> usize {
        let mut count = 0;

        for (_, data_block) in self.data_blocks.iter() {
            count += data_block.chunk_offsets.len();
        }

        count
    }
}