2021-09-28 10:53:11 +00:00
|
|
|
use std::sync::Arc;
|
|
|
|
|
|
|
|
use syndicate::actor::*;
|
|
|
|
|
|
|
|
pub fn adjust(t: &mut Activation, f: &Arc<Field<isize>>, delta: isize) {
|
|
|
|
let f = f.clone();
|
2021-09-28 15:10:36 +00:00
|
|
|
tracing::trace!(?f, v0 = ?t.get(&f), "adjust");
|
2021-09-28 10:53:11 +00:00
|
|
|
*t.get_mut(&f) += delta;
|
2021-09-28 15:10:36 +00:00
|
|
|
tracing::trace!(?f, v1 = ?t.get(&f), "adjust");
|
2021-09-28 10:53:11 +00:00
|
|
|
t.on_stop(move |t| {
|
2021-09-28 15:10:36 +00:00
|
|
|
tracing::trace!(?f, v0 = ?t.get(&f), "cleanup");
|
2021-09-28 10:53:11 +00:00
|
|
|
*t.get_mut(&f) -= delta;
|
2021-09-28 15:10:36 +00:00
|
|
|
tracing::trace!(?f, v1 = ?t.get(&f), "cleanup");
|
2021-09-28 10:53:11 +00:00
|
|
|
Ok(())
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn sync_and_adjust<M: 'static + Send>(t: &mut Activation, r: &Arc<Ref<M>>, f: &Arc<Field<isize>>, delta: isize) {
|
|
|
|
let f = f.clone();
|
|
|
|
let sync_handler = t.create(move |t: &mut Activation| {
|
2021-09-28 15:10:36 +00:00
|
|
|
tracing::trace!(?f, v0 = ?t.get(&f), "sync");
|
2021-09-28 10:53:11 +00:00
|
|
|
*t.get_mut(&f) += delta;
|
2021-09-28 15:10:36 +00:00
|
|
|
tracing::trace!(?f, v1 = ?t.get(&f), "sync");
|
2021-09-28 10:53:11 +00:00
|
|
|
Ok(())
|
|
|
|
});
|
|
|
|
t.sync(r, sync_handler)
|
|
|
|
}
|