Skip to main content

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