1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use std::sync::Arc;
use crossbeam::atomic::AtomicCell;
use crate::{
durability::Durability,
runtime::local_state::{QueryOrigin, QueryRevisions},
Runtime,
};
use super::{memo::Memo, Configuration, FunctionIngredient};
impl<C> FunctionIngredient<C>
where
C: Configuration,
{
pub fn store(
&mut self,
runtime: &mut Runtime,
key: C::Key,
value: C::Value,
durability: Durability,
) {
let revision = runtime.current_revision();
let memo = Memo {
value: Some(value),
verified_at: AtomicCell::new(revision),
revisions: QueryRevisions {
changed_at: revision,
durability,
origin: QueryOrigin::BaseInput,
},
};
if let Some(old_value) = self.memo_map.insert(key, Arc::new(memo)) {
let durability = old_value.load().revisions.durability;
runtime.report_tracked_write(durability);
}
}
}