safe_buffer/
chunk.rs

1pub const CHUNK_SIZE: usize = 1 << 12;
2
3pub struct Chunk {
4    inner: Vec<u8>
5}
6
7impl Chunk {
8    pub fn new() -> io::Result<Self> {
9        let mut vec = Vec::new();
10        match vec.try_reserve(CHUNK_SIZE) {
11            Ok(_) => Ok(Chunk { inner: vec }),
12            Err(_) => Err(io::Error::new(ErrorKind::OutOfMemory, "Could not allocate new chunk!")),
13        }
14    }
15
16    pub fn len(&self) -> usize {
17        self.inner.len()
18    }
19
20    pub fn set(&mut self, index: usize, value: u8) {
21        assert!(index < CHUNK_SIZE);
22
23        // grow array if necessary
24        if index >= self.inner.len() {
25            let diff = index - self.inner.len();
26            for _ in 0..(diff + 1) {
27                self.inner.push(0);
28            }
29        }
30
31        self.inner[index] = value;
32    }
33
34    pub fn as_slice(&self) -> &[u8] {
35        self.inner.as_slice()
36    }
37}