X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=src%2Fqueue.rs;h=9deb48b584ef9a8313bff5908f685f11d910a672;hb=e62243a72a3cba960db7ba7e02fffc3fb5f76059;hp=c87e1d7b5a9c45cce1c877a41ea3d98efb88635b;hpb=190e85ccbfea9e8d8402d75b47c55c925615ac5e;p=hippotat.git diff --git a/src/queue.rs b/src/queue.rs index c87e1d7..9deb48b 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -4,6 +4,29 @@ use crate::prelude::*; +// xxx are we using this at all ? +#[derive(Default,Clone)] +pub struct PacketQueue { + queue: VecDeque, + content: usize, +} + +impl PacketQueue where D: AsRef<[u8]> { + pub fn push_back(&mut self, data: D) { + self.content += data.as_ref().len(); + self.queue.push_back(data); + } + + pub fn pop_front(&mut self) -> Option { + let data = self.queue.pop_front()?; + self.content -= data.as_ref().len(); + Some(data) + } + + pub fn is_empty(&self) -> bool { self.queue.is_empty() } + pub fn peek_front(&self) -> Option<&D> { self.queue.front() } +} + #[derive(Default,Clone)] pub struct QueueBuf { content: usize,