rawdio/graph/
assigned_buffer_pool.rs1use 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}