rawdio/graph/
assigned_buffer_pool.rs

1use std::collections::HashMap;
2
3use crate::OwnedAudioBuffer;
4
5pub struct AssignedBufferPool<Identifier> {
6    assigned_buffers: HashMap<Identifier, OwnedAudioBuffer>,
7}
8
9impl<Identifier> AssignedBufferPool<Identifier>
10where
11    Identifier: std::cmp::Eq + std::hash::Hash + Copy,
12{
13    pub fn with_capacity(buffer_count: usize) -> Self {
14        Self {
15            assigned_buffers: HashMap::with_capacity(buffer_count),
16        }
17    }
18
19    pub fn remove(&mut self, id: &Identifier) -> Option<OwnedAudioBuffer> {
20        self.assigned_buffers.remove(id)
21    }
22
23    pub fn add(&mut self, buffer: OwnedAudioBuffer, id: &Identifier) {
24        self.assigned_buffers.insert(*id, buffer);
25    }
26
27    pub fn is_empty(&self) -> bool {
28        self.assigned_buffers.is_empty()
29    }
30
31    pub fn has(&self, id: &Identifier) -> bool {
32        self.assigned_buffers.contains_key(id)
33    }
34
35    pub fn remove_next(&mut self) -> Option<(Identifier, OwnedAudioBuffer)> {
36        let id = match self.assigned_buffers.keys().next() {
37            Some(id) => *id,
38            None => return None,
39        };
40
41        let buffer = self.remove(&id).expect("Buffer not found");
42
43        Some((id, buffer))
44    }
45}