limbo_core/storage/
buffer_pool.rs1use crate::io::BufferData;
2use std::cell::RefCell;
3use std::pin::Pin;
4
5pub struct BufferPool {
6 pub free_buffers: RefCell<Vec<BufferData>>,
7 page_size: usize,
8}
9
10impl BufferPool {
11 pub fn new(page_size: usize) -> Self {
12 Self {
13 free_buffers: RefCell::new(Vec::new()),
14 page_size,
15 }
16 }
17
18 pub fn get(&self) -> BufferData {
19 let mut free_buffers = self.free_buffers.borrow_mut();
20 if let Some(buffer) = free_buffers.pop() {
21 buffer
22 } else {
23 Pin::new(vec![0; self.page_size])
24 }
25 }
26
27 pub fn put(&self, buffer: BufferData) {
28 let mut free_buffers = self.free_buffers.borrow_mut();
29 free_buffers.push(buffer);
30 }
31}