Files
turso/core/buffer_pool.rs
Pekka Enberg 2724b0f411 Simplify Buffer and Completion
Eliminate the explicit lifetime parameter from Buffer to simplify the code.
2024-01-05 16:32:21 +02:00

31 lines
730 B
Rust

use crate::io::BufferData;
use std::{pin::Pin, sync::Mutex};
pub struct BufferPool {
pub free_buffers: Mutex<Vec<BufferData>>,
page_size: usize,
}
impl BufferPool {
pub fn new(page_size: usize) -> Self {
Self {
free_buffers: Mutex::new(Vec::new()),
page_size,
}
}
pub fn get(&self) -> BufferData {
let mut free_buffers = self.free_buffers.lock().unwrap();
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.lock().unwrap();
free_buffers.push(buffer);
}
}