use crate::geometry::Geometry;
use super::TxMessage;
#[derive(Default)]
pub struct TxBufferPoolSync {
num_devices: usize,
buffer: Option<Vec<TxMessage>>,
}
impl TxBufferPoolSync {
pub const fn new() -> Self {
Self {
num_devices: 0,
buffer: None,
}
}
pub fn init(&mut self, geometry: &Geometry) {
self.num_devices = geometry.len();
}
pub fn borrow(&mut self) -> Vec<TxMessage> {
self.buffer
.take()
.unwrap_or_else(|| vec![TxMessage::new(); self.num_devices])
}
pub fn return_buffer(&mut self, buffer: Vec<TxMessage>) {
assert_eq!(buffer.len(), self.num_devices);
self.buffer = Some(buffer);
}
}