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 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}