qubit_thread_pool/delayed/
delayed_task_state.rs1use std::sync::atomic::{
11 AtomicU8,
12 Ordering,
13};
14
15pub struct DelayedTaskState;
17
18impl DelayedTaskState {
19 pub const PENDING: u8 = 0;
21 pub const STARTED: u8 = 1;
23 pub const CANCELLED: u8 = 2;
25
26 pub fn cancel(task_state: &AtomicU8) -> bool {
28 task_state
29 .compare_exchange(
30 Self::PENDING,
31 Self::CANCELLED,
32 Ordering::AcqRel,
33 Ordering::Acquire,
34 )
35 .is_ok()
36 }
37
38 pub fn start(task_state: &AtomicU8) -> bool {
40 task_state
41 .compare_exchange(
42 Self::PENDING,
43 Self::STARTED,
44 Ordering::AcqRel,
45 Ordering::Acquire,
46 )
47 .is_ok()
48 }
49
50 pub fn is_cancelled(task_state: &AtomicU8) -> bool {
52 task_state.load(Ordering::Acquire) == Self::CANCELLED
53 }
54}
55
56pub const TASK_PENDING: u8 = DelayedTaskState::PENDING;
57pub const TASK_CANCELLED: u8 = DelayedTaskState::CANCELLED;
58
59pub fn cancel_task_state(task_state: &AtomicU8) -> bool {
61 DelayedTaskState::cancel(task_state)
62}
63
64pub fn start_task_state(task_state: &AtomicU8) -> bool {
66 DelayedTaskState::start(task_state)
67}
68
69pub fn is_task_cancelled(task_state: &AtomicU8) -> bool {
71 DelayedTaskState::is_cancelled(task_state)
72}