feat(registry): get_valid_contents
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
use anyhow::{anyhow, Result};
|
use anyhow::{anyhow, Result};
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use slab::{Iter, Slab};
|
use slab::Slab;
|
||||||
use std::sync::{Arc, Weak};
|
use std::sync::{Arc, Weak};
|
||||||
|
|
||||||
pub struct Registry<T>(RwLock<Slab<Weak<T>>>);
|
pub struct Registry<T>(RwLock<Slab<Weak<T>>>);
|
||||||
@@ -11,9 +11,12 @@ impl<T> Registry<T> {
|
|||||||
self.0.write().insert(Arc::downgrade(&t_arc));
|
self.0.write().insert(Arc::downgrade(&t_arc));
|
||||||
Ok(t_arc)
|
Ok(t_arc)
|
||||||
}
|
}
|
||||||
pub fn iterate<F: FnOnce(Iter<'_, Weak<T>>)>(&self, closure: F) -> Result<()> {
|
pub fn get_valid_contents(&self) -> Vec<Arc<T>> {
|
||||||
closure(self.0.read().iter());
|
self.0
|
||||||
Ok(())
|
.read()
|
||||||
|
.iter()
|
||||||
|
.filter_map(|(_, item)| item.upgrade())
|
||||||
|
.collect()
|
||||||
}
|
}
|
||||||
pub fn remove(&self, t: &T) -> Result<()> {
|
pub fn remove(&self, t: &T) -> Result<()> {
|
||||||
let mut del_idx: Option<usize> = None;
|
let mut del_idx: Option<usize> = None;
|
||||||
|
|||||||
Reference in New Issue
Block a user