sac_base/operations/miscellaneous/buffer.rs
1use crate::network::node::Node;
2use alloc::boxed::Box;
3use core::any::Any;
4
5/// Simple operation which just buffers the last set input.
6/// This is as example used as input.
7pub struct Buffer {}
8
9impl Buffer {
10
11 /// Generate a new buffer
12 ///
13 /// ## Example
14 /// ```rust
15 /// use sac_base::operations::miscellaneous::buffer::Buffer;
16 /// let mut buffer = Buffer::new();
17 /// buffer.feed(&[1.0][..]);
18 /// assert_eq!(buffer.poll(), &[1.0][..]);
19 /// buffer.feed(&[5.0][..]);
20 /// assert_eq!(buffer.poll(), &[5.0][..]);
21 /// buffer.feed(&[10.0][..]);
22 /// assert_eq!(buffer.poll(), &[10.0][..]);
23 /// ```
24 pub fn new<T>() -> Node<T>
25 where T: Copy + Default
26 {
27 let storage = Box::new(0) as Box<dyn Any>;
28 Node::new(storage, |_data_input, _input, _output| {})
29 }
30}
31
32#[cfg(test)]
33mod tests {
34
35 use super::*;
36
37 #[test]
38 fn test_buffer() {
39 let mut buffer = Buffer::new();
40 buffer.feed(&[1.0][..]);
41 assert_eq!(buffer.poll(), &[1.0][..]);
42 buffer.feed(&[5.0][..]);
43 assert_eq!(buffer.poll(), &[5.0][..]);
44 buffer.feed(&[10.0][..]);
45 assert_eq!(buffer.poll(), &[10.0][..]);
46 }
47}
48