Skip to main content

luaur_vm/functions/
lua_clock.rs

1use crate::functions::clock_period::clock_period;
2use crate::functions::clock_timestamp::clock_timestamp;
3
4pub fn lua_clock() -> f64 {
5    use core::sync::atomic::{AtomicU64, Ordering};
6
7    static PERIOD_BITS: AtomicU64 = AtomicU64::new(0);
8
9    let mut bits = PERIOD_BITS.load(Ordering::Relaxed);
10
11    if bits == 0 {
12        let p = clock_period();
13        bits = p.to_bits();
14        PERIOD_BITS.store(bits, Ordering::Relaxed);
15    }
16
17    let period = f64::from_bits(bits);
18    clock_timestamp() * period
19}