stak_time/
primitive_set.rs1mod primitive;
2
3pub use self::primitive::Primitive;
4use crate::Clock;
5use stak_vm::{Error, Memory, PrimitiveSet};
6
7pub struct TimePrimitiveSet<T: Clock> {
9 clock: T,
10}
11
12impl<T: Clock> TimePrimitiveSet<T> {
13 pub const fn new(clock: T) -> Self {
15 Self { clock }
16 }
17}
18
19impl<T: Clock> PrimitiveSet for TimePrimitiveSet<T> {
20 type Error = Error;
21
22 fn operate(&mut self, memory: &mut Memory, primitive: usize) -> Result<(), Self::Error> {
23 match primitive {
24 Primitive::CURRENT_JIFFY => {
25 memory.push(
26 self.clock
27 .current_jiffy()
28 .map(From::from)
29 .unwrap_or(memory.boolean(false).into()),
30 )?;
31 }
32 _ => return Err(Error::IllegalPrimitive),
33 }
34
35 Ok(())
36 }
37}