1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use crate::consts::CHUNK_SIZE;
use anyhow::anyhow;
use log::trace;


pub fn get_max_chunks(size: u64) -> u64 {
    let size_float = size as f64;
    let chunk = CHUNK_SIZE as f64;

    let threads = ((size_float / chunk).ceil()) as u64;
    return threads;
}

pub fn get_chunk_size(chunk_index: u64, size: u64) -> anyhow::Result<u64> {
    let left = size % CHUNK_SIZE;
    let max_threads  =get_max_chunks(size);

    if chunk_index > max_threads {
        trace!("Invalid chunk index {} with size {} and max_threads {}", chunk_index, size, max_threads);
        return Err(anyhow!("Invalid chunk index with given size"));
    }

    if chunk_index == max_threads -1 {
        return Ok(left);
    }

    return Ok(CHUNK_SIZE);
}