mirror of
https://github.com/tursodatabase/limbo.git
synced 2025-07-15 00:15:00 +00:00
31 lines
737 B
Rust
31 lines
737 B
Rust
use crate::io::BufferData;
|
|
use std::cell::RefCell;
|
|
use std::pin::Pin;
|
|
|
|
pub struct BufferPool {
|
|
pub free_buffers: RefCell<Vec<BufferData>>,
|
|
page_size: usize,
|
|
}
|
|
|
|
impl BufferPool {
|
|
pub fn new(page_size: usize) -> Self {
|
|
Self {
|
|
free_buffers: RefCell::new(Vec::new()),
|
|
page_size,
|
|
}
|
|
}
|
|
|
|
pub fn get(&self) -> BufferData {
|
|
let mut free_buffers = self.free_buffers.borrow_mut();
|
|
if let Some(buffer) = free_buffers.pop() {
|
|
buffer
|
|
} else {
|
|
Pin::new(vec![0; self.page_size])
|
|
}
|
|
}
|
|
|
|
pub fn put(&self, buffer: BufferData) {
|
|
let mut free_buffers = self.free_buffers.borrow_mut();
|
|
free_buffers.push(buffer);
|
|
}
|
|
}
|