Skip to main content

samp_sdk/omp/generated/
timer.rs

1//! `ITimer` — generated by `cargo xtask gen-omp` from `Server/Components/Timers/timers.hpp`.
2//! Implemented by `Timer` in the server's `Timers`.
3//!
4//! Do not edit: change `xtask/omp-wrappers.toml` or the generator and
5//! regenerate. Slots are clang's layout of the header for each ABI, checked
6//! against the official binaries by `cargo xtask check-abi --generated`.
7
8#![allow(unused_imports)]
9
10use crate::omp::containers::{FlatSet, HybridString, Pair, Span};
11use crate::omp::types::{
12    Colour, GTAQuat, Hours, Microseconds, Milliseconds, Minutes, Seconds, StringView, TimePoint,
13    UID, Vector2, Vector3, Vector4, WorldTimePoint,
14};
15use crate::omp::vtable::{call_vtable_small_struct, opaque, slots, virtual_fns};
16use crate::omp::*;
17
18slots! {
19    /// `bool ITimer::running()`
20    SLOT_RUNNING: usize = 6, 5;
21    /// `Milliseconds ITimer::remaining()`
22    SLOT_REMAINING: usize = 7, 6;
23    /// `unsigned int ITimer::calls()`
24    SLOT_CALLS: usize = 8, 7;
25    /// `Milliseconds ITimer::interval()`
26    SLOT_INTERVAL: usize = 9, 8;
27    /// `bool ITimer::trigger()`
28    SLOT_TRIGGER: usize = 10, 9;
29    /// `TimerTimeOutHandler * ITimer::handler()`
30    SLOT_HANDLER: usize = 12, 11;
31}
32
33virtual_fns! {
34    /// `bool ITimer::running()`.
35    ///
36    /// # Safety
37    /// `timer` must be a live `ITimer`.
38    #[must_use]
39    pub fn timer_running(timer: ITimer) -> bool = [0, SLOT_RUNNING] or false;
40
41    /// `unsigned int ITimer::calls()`.
42    ///
43    /// # Safety
44    /// `timer` must be a live `ITimer`.
45    #[must_use]
46    pub fn timer_calls(timer: ITimer) -> u32 = [0, SLOT_CALLS] or 0;
47
48    /// `bool ITimer::trigger()`.
49    ///
50    /// # Safety
51    /// `timer` must be a live `ITimer`.
52    #[must_use]
53    pub fn timer_trigger(timer: ITimer) -> bool = [0, SLOT_TRIGGER] or false;
54
55    /// `TimerTimeOutHandler * ITimer::handler()`.
56    ///
57    /// # Safety
58    /// `timer` must be a live `ITimer`.
59    #[must_use]
60    pub fn timer_handler(
61        timer: ITimer,
62    ) -> *mut TimerTimeOutHandler = [0, SLOT_HANDLER] or std::ptr::null_mut();
63}
64
65/// `Milliseconds ITimer::remaining()`.
66///
67/// # Safety
68/// `timer` must be a live `ITimer`.
69#[must_use]
70pub unsafe fn timer_remaining(timer: *mut ITimer) -> Option<Milliseconds> {
71    call_vtable_small_struct!(
72        timer.cast::<u8>(),
73        0,
74        SLOT_REMAINING,
75        Milliseconds,
76        Milliseconds::default()
77    )
78}
79
80/// `Milliseconds ITimer::interval()`.
81///
82/// # Safety
83/// `timer` must be a live `ITimer`.
84#[must_use]
85pub unsafe fn timer_interval(timer: *mut ITimer) -> Option<Milliseconds> {
86    call_vtable_small_struct!(
87        timer.cast::<u8>(),
88        0,
89        SLOT_INTERVAL,
90        Milliseconds,
91        Milliseconds::default()
92    )
93}
94
95// What the generator left out, and why.
96// skipped: `void ITimer::kill()` — covered by a hand-written wrapper under another name