3 个稳定版本
1.1.1 | 2023年2月6日 |
---|---|
1.0.1 | 2023年2月5日 |
在 科学 中排名 #425
125KB
347 行
欢迎使用 GraphEvent!
图事件 是一个 Rust crate,旨在将状态相互关联。每个状态都将包含在特定节点中,并带有泛型类型值。相应地,节点以两种不同的方式连接:通过通知和观察。
工作原理
通知
首先,任何节点都需要标记其他节点,就像说当它更新时,它会通知它们。如果泛型类型实现了 PartialEq,它将检查节点携带的值是否发生了变化。如果没有,用户系统将不得不通知节点本身它确实已更新。
use crate::{node::Node};
let mut a = Node::new(5);
let b = Node::new(10);
let _ = a.try_mark_for_notification(b.clone(), |a,b| {*b += *a ; true}, crate::util::NotificationPolicy::All);
a.update(11);
assert_eq!(*a,11);
assert_eq!(*b,21);
通知策略
策略 | 描述 | 代码中 |
---|---|---|
ALL | 通知所有节点。 | NotificationPolicy::All |
更新较少 | 通知更新较少的节点。 | NotificationPolicy::LessUpdated |
更新较多 | 通知更新较多的节点。 | NotificationPolicy::MoreUpdated |
更新相同 | 通知更新相同的节点。 | NotificationPolicy::EquallyUpdated |
更新不同 | 通知更新不同的节点。 | NotificationPolicy::DifferentlyUpdated |
更新相同或更少 | 通知更新相同或更少的节点。 | NotificationPolicy::Equally Or Less Updated |
更新相同或更多 | 通知更新相同或更多的节点。 | NotificationPolicy::EquallyOrMoreUpdated |
观察
当任何节点标记了另一个节点,并且该节点被更新时,就会发生这种情况。然后,节点之间的关系/连接将保持更新节点的先前状态。
注意: 然而,观察 节点仅在需要时才进行观察。
use crate::{node::Node};
let mut a = Node::new(5);
let mut b = Node::new(10);
let _ = b.try_mark_for_observation(a.clone(), |a, b| {*b += *a; true });
assert_eq!(*a,5);
a.update(11);
assert_eq!(*a,11);
assert_eq!(*b,10);
b.watch_for_updates();
assert_eq!(*b,21);