rill_core/buffer/
registry.rs1use std::collections::HashMap;
10
11use super::Buffer;
12
13pub struct BufferRegistry<T> {
18 buffers: HashMap<String, Box<dyn Buffer<T>>>,
19}
20
21impl<T> BufferRegistry<T> {
22 pub fn new() -> Self {
24 Self {
25 buffers: HashMap::new(),
26 }
27 }
28
29 pub fn register(&mut self, name: impl Into<String>, buffer: Box<dyn Buffer<T>>) {
31 self.buffers.insert(name.into(), buffer);
32 }
33
34 pub fn get_ptr(&self, name: &str) -> Option<*const dyn Buffer<T>> {
38 self.buffers.get(name).map(|b| &**b as *const dyn Buffer<T>)
39 }
40
41 pub fn len(&self) -> usize {
43 self.buffers.len()
44 }
45
46 pub fn is_empty(&self) -> bool {
48 self.buffers.is_empty()
49 }
50}
51
52impl<T> Default for BufferRegistry<T> {
53 fn default() -> Self {
54 Self::new()
55 }
56}
57
58#[cfg(test)]
59mod tests {
60 use super::*;
61 use crate::buffer::HeapBuffer;
62
63 #[test]
64 fn test_registry() {
65 let mut reg = BufferRegistry::<f32>::new();
66 reg.register("tape_0", Box::new(HeapBuffer::new(1024)));
67 assert_eq!(reg.len(), 1);
68 assert!(reg.get_ptr("tape_0").is_some());
69 assert!(reg.get_ptr("nonexistent").is_none());
70 }
71}