// Clock 注入点。核心库不读系统时间。
// 与 Embedder 分文件,保持模块边界与文件 locality 一致。
///|
/// 时钟抽象。缺省 LogicalClock;测试可注入 FixedClock 精确断言 created_at。
pub(open) trait Clock {
fn now_ms(self : Self) -> Int64
}
///|
/// 逻辑时钟:每次调用单调 +1ms。open 时从快照 header.clock 续接,
/// 测试确定性,生产可注入系统时钟。
pub struct LogicalClock {
mut current : Int64
}
///|
pub fn LogicalClock::new(start? : Int64) -> LogicalClock {
match start {
Some(v) => LogicalClock::{ current: v, }
None => LogicalClock::{ current: 0L, }
}
}
///|
pub impl Clock for LogicalClock with fn now_ms(self) {
self.current = self.current + 1L
self.current
}
///|
pub extend LogicalClock with Clock::{now_ms}
///|
/// 固定时钟(测试用):now_ms 恒返回初始值。
pub struct FixedClock {
value : Int64
}
///|
pub fn FixedClock::new(value : Int64) -> FixedClock {
FixedClock::{ value, }
}
///|
pub impl Clock for FixedClock with fn now_ms(self) {
self.value
}
///|
pub extend FixedClock with Clock::{now_ms}