rrpack_basis/frames/
frame.rs1use derive_more::Deref;
2use serde::{Deserialize, Serialize};
3use std::collections::VecDeque;
4
5static DEFAULT_SIZE: u32 = 20;
6
7#[derive(Debug, Clone, Serialize, Deserialize, Deref)]
8pub struct Frame<T> {
9 size: u32,
11 #[deref]
12 frame: VecDeque<T>,
13}
14
15impl<T> Default for Frame<T> {
16 fn default() -> Self {
17 Self::new(DEFAULT_SIZE)
18 }
19}
20
21impl<T> Frame<T> {
22 pub fn new(size: u32) -> Self {
23 Self {
24 size,
25 frame: VecDeque::with_capacity(size as usize),
26 }
27 }
28
29 pub fn insert_pop(&mut self, item: T) -> Option<T> {
38 let result = {
39 if self.frame.len() > self.size as usize {
40 self.frame.pop_front()
41 } else {
42 None
43 }
44 };
45 self.frame.push_back(item);
46 result
47 }
48
49 pub fn size(&self) -> u32 {
50 self.size
51 }
52
53 pub fn clear(&mut self) {
54 self.frame.clear()
55 }
56}