pub struct BufferPool<T> {
pub buffer_size: usize,
/* private fields */
}Expand description
A pool of real/complex buffer objects. Buffers are dynamically created as needed
and reused if previously Droped. Buffers are never freed. Instead buffers are kept
in reserve and reused when a new buffer is requested.
use pitch_detection::utils::buffer::BufferPool;
let mut buffers = BufferPool::new(3);
let buf_cell1 = buffers.get_real_buffer();
{
// This buffer won't be dropped until the end of the function
let mut buf1 = buf_cell1.borrow_mut();
buf1[0] = 5.5;
}
{
// This buffer will be dropped when the scope ends
let buf_cell2 = buffers.get_real_buffer();
let mut buf2 = buf_cell2.borrow_mut();
buf2[1] = 6.6;
}
{
// This buffer will be dropped when the scope ends
// It is the same buffer that was just used (i.e., it's a reused buffer)
let buf_cell3 = buffers.get_real_buffer();
let mut buf3 = buf_cell3.borrow_mut();
buf3[2] = 7.7;
}
// The first buffer we asked for should not have been reused.
assert_eq!(&buf_cell1.borrow()[..], &[5.5, 0., 0.]);
let buf_cell2 = buffers.get_real_buffer();
// The second buffer was reused because it was dropped and then another buffer was requested.
assert_eq!(&buf_cell2.borrow()[..], &[0.0, 6.6, 7.7]);Fields§
§buffer_size: usizeImplementations§
Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for BufferPool<T>
impl<T> !RefUnwindSafe for BufferPool<T>
impl<T> !Send for BufferPool<T>
impl<T> !Sync for BufferPool<T>
impl<T> Unpin for BufferPool<T>
impl<T> !UnwindSafe for BufferPool<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more