use std::sync::{Arc, RwLock}; use super::Capture; /// Capture layer state. pub struct State { pub(super) active: RwLock>>, } impl Default for State { fn default() -> Self { Self::new() } } impl State { #[must_use] pub fn new() -> Self { Self { active: RwLock::new(Vec::new()), } } pub(super) fn add(&self, capture: &Arc) { self.active .write() .expect("locked for writing") .push(capture.clone()); } pub(super) fn del(&self, capture: &Arc) { let mut vec = self.active.write().expect("locked for writing"); if let Some(pos) = vec.iter().position(|v| Arc::ptr_eq(v, capture)) { vec.swap_remove(pos); } } }