autd3_core/link/
buffer_pool.rs1use zerocopy::FromZeros;
2
3use crate::geometry::Geometry;
4
5use super::TxMessage;
6
7pub struct TxBufferPoolSync {
9 num_devices: usize,
10 buffer: Option<Vec<TxMessage>>,
11}
12
13impl TxBufferPoolSync {
14 pub const fn new() -> Self {
16 Self {
17 num_devices: 0,
18 buffer: None,
19 }
20 }
21
22 pub fn init(&mut self, geometry: &Geometry) {
24 self.num_devices = geometry.len();
25 }
26
27 pub fn borrow(&mut self) -> Vec<TxMessage> {
29 self.buffer
30 .take()
31 .unwrap_or_else(|| vec![TxMessage::new_zeroed(); self.num_devices])
32 }
33
34 pub fn return_buffer(&mut self, buffer: Vec<TxMessage>) {
36 assert_eq!(buffer.len(), self.num_devices);
37 self.buffer = Some(buffer);
38 }
39}
40
41impl Default for TxBufferPoolSync {
42 fn default() -> Self {
43 Self::new()
44 }
45}