ps_buffer/methods/
reserve.rs1use ps_alloc::HEADER_SIZE;
2
3use crate::{Buffer, BufferError};
4
5impl Buffer {
6 pub fn reserve(&mut self, num_bytes: usize) -> Result<&mut Self, BufferError> {
10 let size = self
11 .len()
12 .saturating_add(num_bytes)
13 .saturating_add(HEADER_SIZE)
14 .min(MAX_SIZE)
15 .next_power_of_two()
16 .saturating_sub(HEADER_SIZE);
17
18 self.reserve_total(size)
19 }
20}
21
22const MAX_SIZE: usize = ((isize::MAX >> 1) as usize).next_power_of_two() - HEADER_SIZE;
23
24#[cfg(test)]
25mod tests {
26 use ps_alloc::HEADER_SIZE;
27
28 use crate::{Buffer, BufferError};
29
30 #[test]
31 fn capacity() -> Result<(), BufferError> {
32 let mut buffer = Buffer::new();
33
34 for i in 8..32 {
35 buffer.reserve(1 << i)?;
36
37 assert_eq!(
38 buffer.capacity(),
39 (1 << (i + 1)) - HEADER_SIZE,
40 "Incorrect capacity at i={i}"
41 );
42 }
43
44 Ok(())
45 }
46}