use crate::{
resource::{Blas, Trackable},
track::metadata::ResourceMetadata,
};
use alloc::sync::Arc;
#[derive(Debug)]
pub(crate) struct BlasTracker {
metadata: ResourceMetadata<Arc<Blas>>,
size: usize,
}
impl BlasTracker {
pub fn new() -> Self {
Self {
metadata: ResourceMetadata::new(),
size: 0,
}
}
pub fn insert_single(&mut self, resource: Arc<Blas>) -> &Arc<Blas> {
let index = resource.tracker_index().as_usize();
self.allow_index(index);
unsafe {
self.metadata.insert(index, resource)
}
}
pub fn set_size(&mut self, size: usize) {
self.size = size;
self.metadata.set_size(size)
}
fn allow_index(&mut self, index: usize) {
if index >= self.size {
self.set_size(index + 1);
}
}
pub fn contains(&self, blas: &Blas) -> bool {
self.metadata.contains(blas.tracker_index().as_usize())
}
}