From 6bc3285baa3e51c6fa65cfa5f37de3c56da940d6 Mon Sep 17 00:00:00 2001 From: Jokler Date: Tue, 14 Jan 2020 16:04:56 +0100 Subject: Remove playlist length limit by using VecDeque --- src/playlist.rs | 58 ++++++++++++--------------------------------------------- 1 file changed, 12 insertions(+), 46 deletions(-) (limited to 'src/playlist.rs') diff --git a/src/playlist.rs b/src/playlist.rs index 689a743..86b9100 100644 --- a/src/playlist.rs +++ b/src/playlist.rs @@ -1,71 +1,37 @@ +use std::collections::VecDeque; + use log::info; pub struct Playlist { - data: Vec>, - read: usize, - write: usize, - is_full: bool, + data: VecDeque, } impl Playlist { pub fn new() -> Self { Self { - data: Vec::with_capacity(50), - read: 0, - write: 0, - is_full: false, + data: VecDeque::new(), } } - pub fn push(&mut self, req: AudioRequest) -> bool { - if self.is_full { - return false; - } - + pub fn push(&mut self, req: AudioRequest) { info!("Adding {} to playlist", &req.title); - if self.data.len() < self.data.capacity() { - self.data.push(Some(req)); - } else { - self.data[self.write] = Some(req); - } - - self.write = (self.write + 1) % self.data.capacity(); - - if self.write == self.read { - self.is_full = true; - } - - true - } - - pub fn is_empty(&self) -> bool { - !self.is_full && self.write == self.read - } - - pub fn is_full(&self) -> bool { - self.is_full + self.data.push_front(req) } pub fn pop(&mut self) -> Option { - if self.is_empty() { - None - } else { - self.is_full = false; - let res = self.data[self.read].take(); - self.read = (self.read + 1) % self.data.capacity(); + let res = self.data.pop_back(); + info!("Popping {:?} from playlist", res.as_ref().map(|r| &r.title)); - info!("Popping {:?} from playlist", res.as_ref().map(|r| &r.title)); + res + } - res - } + pub fn is_empty(&self) -> bool { + self.data.is_empty() } pub fn clear(&mut self) { self.data.clear(); - self.read = 0; - self.write = 0; - self.is_full = false; info!("Cleared playlist") } -- cgit v1.2.3-70-g09d2