autd3_core/link/
buffer_pool.rs1use crate::geometry::Geometry;
2
3use super::TxMessage;
4
5#[derive(Default)]
7pub struct TxBufferPoolSync {
8 num_devices: usize,
9 buffer: Option<Vec<TxMessage>>,
10}
11
12impl TxBufferPoolSync {
13 pub const fn new() -> Self {
15 Self {
16 num_devices: 0,
17 buffer: None,
18 }
19 }
20
21 pub fn init(&mut self, geometry: &Geometry) {
23 self.num_devices = geometry.len();
24 }
25
26 pub fn borrow(&mut self) -> Vec<TxMessage> {
28 self.buffer
29 .take()
30 .unwrap_or_else(|| vec![TxMessage::new(); self.num_devices])
31 }
32
33 pub fn return_buffer(&mut self, buffer: Vec<TxMessage>) {
35 assert_eq!(buffer.len(), self.num_devices);
36 self.buffer = Some(buffer);
37 }
38}