pub struct ReactiveMapCore<K, V> {
pub interceptors_any: Arc<Mutex<Vec<(u64, InterceptorAny<K, V>)>>>,
pub interceptors_key: Arc<DashMap<K, Vec<(u64, InterceptorKey<K, V>)>>>,
pub subscribers_any: Arc<Mutex<Vec<(u64, SubscriberAny<K, V>, SubscriptionMeta)>>>,
pub subscribers_key: Arc<DashMap<K, Vec<(u64, SubscriberKey<K, V>, SubscriptionMeta)>>>,
pub next_id: Arc<AtomicU64>,
pub intercept_depth: Arc<AtomicUsize>,
pub cache: Arc<MapCache<K, V>>,
}Fields§
§interceptors_any: Arc<Mutex<Vec<(u64, InterceptorAny<K, V>)>>>§interceptors_key: Arc<DashMap<K, Vec<(u64, InterceptorKey<K, V>)>>>§subscribers_any: Arc<Mutex<Vec<(u64, SubscriberAny<K, V>, SubscriptionMeta)>>>§subscribers_key: Arc<DashMap<K, Vec<(u64, SubscriberKey<K, V>, SubscriptionMeta)>>>§next_id: Arc<AtomicU64>§intercept_depth: Arc<AtomicUsize>§cache: Arc<MapCache<K, V>>Implementations§
Source§impl<K: ReactiveMapKey, V: ReactiveMapValue> ReactiveMapCore<K, V>
impl<K: ReactiveMapKey, V: ReactiveMapValue> ReactiveMapCore<K, V>
pub fn new() -> Self
Sourcepub fn with_capacity(_entries: usize) -> Self
pub fn with_capacity(_entries: usize) -> Self
The same. A tree has nothing to reserve, so entries is ignored; the
signature stays because a caller loading a store knows the size and
should not have to know that.
pub fn subscribe_any<F>(&self, callback: F) -> SignalSubscription
pub fn subscribe_key<F>(&self, key: K, callback: F) -> SignalSubscription
pub fn intercept<F>(&self, path: StorePath, callback: F) -> InterceptDisposer
pub fn intercept_key<F>(&self, key: K, callback: F) -> InterceptDisposer
pub fn run_interceptors( &self, path: StorePath, change: MapChange<K, V>, ) -> Result<MapChange<K, V>, Refusal>
Sourcepub fn notify(&self, change: &MapChange<K, V>)
pub fn notify(&self, change: &MapChange<K, V>)
Fires every subscriber interested in change.
The callbacks are collected before any of them runs, and every guard is
released first. A subscriber reacting to a change by writing to the same
map is ordinary, and neither a Mutex nor a DashMap shard is
reentrant, so holding either across the calls deadlocks the thread.
Trait Implementations§
Source§impl<K, V> Clone for ReactiveMapCore<K, V>
impl<K, V> Clone for ReactiveMapCore<K, V>
Source§impl<K: ReactiveMapKey, V: ReactiveMapValue> Default for ReactiveMapCore<K, V>
impl<K: ReactiveMapKey, V: ReactiveMapValue> Default for ReactiveMapCore<K, V>
Auto Trait Implementations§
impl<K, V> !RefUnwindSafe for ReactiveMapCore<K, V>
impl<K, V> !UnwindSafe for ReactiveMapCore<K, V>
impl<K, V> Freeze for ReactiveMapCore<K, V>where
Arc<Mutex<Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: Freeze,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: Freeze,
Arc<Mutex<Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: Freeze,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: Freeze,
Arc<MapCache<K, V>>: Freeze,
impl<K, V> Send for ReactiveMapCore<K, V>where
Arc<Mutex<Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: Send,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: Send,
Arc<Mutex<Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: Send,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: Send,
Arc<MapCache<K, V>>: Send,
impl<K, V> Sync for ReactiveMapCore<K, V>where
Arc<Mutex<Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: Sync,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: Sync,
Arc<Mutex<Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: Sync,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: Sync,
Arc<MapCache<K, V>>: Sync,
impl<K, V> Unpin for ReactiveMapCore<K, V>where
Arc<Mutex<Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: Unpin,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: Unpin,
Arc<Mutex<Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: Unpin,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: Unpin,
Arc<MapCache<K, V>>: Unpin,
impl<K, V> UnsafeUnpin for ReactiveMapCore<K, V>where
Arc<Mutex<Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: UnsafeUnpin,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(MapChange<K, V>) -> Option<MapChange<K, V>> + Send + Sync>)>>>: UnsafeUnpin,
Arc<Mutex<Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: UnsafeUnpin,
Arc<DashMap<K, Vec<(u64, Arc<dyn Fn(&MapChange<K, V>) + Send + Sync>, SubscriptionMeta)>>>: UnsafeUnpin,
Arc<MapCache<K, V>>: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more