use crate::c;
pub mod real {
use super::*;
#[inline(always)]
pub fn nanos() -> u64 {
unsafe{c::lexlibTimeNanos()}
}
#[inline(always)]
pub fn micros() -> u64 {
unsafe{c::lexlibTimeMicros()}
}
#[inline(always)]
pub fn millis() -> u64 {
unsafe{c::lexlibTimeMillis()}
}
#[inline(always)]
pub fn seconds() -> u64 {
unsafe{c::lexlibTimeSeconds()}
}
}
pub mod thread {
use super::*;
#[inline(always)]
pub fn nanos() -> u64 {
unsafe{c::lexlibThrdNanos()}
}
#[inline(always)]
pub fn micros() -> u64 {
unsafe{c::lexlibThrdMicros()}
}
#[inline(always)]
pub fn millis() -> u64 {
unsafe{c::lexlibThrdMillis()}
}
#[inline(always)]
pub fn seconds() -> u64 {
unsafe{c::lexlibThrdSeconds()}
}
}
pub mod process {
use super::*;
#[inline(always)]
pub fn nanos() -> u64 {
unsafe{c::lexlibProcNanos()}
}
#[inline(always)]
pub fn micros() -> u64 {
unsafe{c::lexlibProcMicros()}
}
#[inline(always)]
pub fn millis() -> u64 {
unsafe{c::lexlibProcMillis()}
}
#[inline(always)]
pub fn seconds() -> u64 {
unsafe{c::lexlibProcSeconds()}
}
}
#[repr(C)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Timer {
time: u64,
left: u64,
last: u64,
}
impl Timer {
#[inline(always)]
pub const fn new(ms: u64) -> Self {
Self {
time: ms,
left: ms,
last: 0,
}
}
#[inline(always)]
pub fn set(&mut self, ms: u64){
unsafe{c::lexlibTimerSet(self, ms)}
}
#[inline(always)]
pub fn add(&mut self, ms: u64){
unsafe{c::lexlibTimerAdd(self, ms)}
}
#[inline(always)]
pub fn start(&mut self){
unsafe{c::lexlibTimerStart(self)}
}
#[inline(always)]
pub fn update(&mut self){
unsafe{c::lexlibTimerUpdate(self)}
}
#[inline(always)]
pub fn done(&mut self) -> bool {
unsafe{ c::lexlibTimerDone(self) != 0 }
}
#[inline(always)]
pub fn until_done(&mut self){
unsafe{c::lexlibTimerUntilDone(self)}
}
#[inline(always)]
pub fn finished(&self) -> bool {
unsafe{ c::lexlibTimerFinished(self) != 0 }
}
#[inline(always)]
pub fn left(&self) -> u64 {
self.left
}
#[inline(always)]
pub fn time(&self) -> u64 {
self.time
}
}