1use std::sync::atomic::Ordering;
3
4pub trait AtomicQuick<T> {
6 fn qload(&self) -> T;
8 fn qstore(&self, value: T);
10 #[inline]
11 fn qsave(&self, value: T) {
14 self.qstore(value)
15 }
16}
17
18macro_rules! impl_atomic_quick_with_atomic {
19 ($type1:ty, $type2:ty) => {
20 impl AtomicQuick<$type2> for $type1 {
21 #[inline]
22 fn qload(&self) -> $type2 {
23 self.load(Ordering::SeqCst)
24 }
25 #[inline]
26 fn qstore(&self, value: $type2) {
27 self.store(value, Ordering::SeqCst)
28 }
29 }
30 };
31}
32
33impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicBool, bool);
34impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicI8, i8);
35impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicU8, u8);
36impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicI16, i16);
37impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicU16, u16);
38impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicI32, i32);
39impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicU32, u32);
40impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicI64, i64);
41impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicU64, u64);
42impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicIsize, isize);
43impl_atomic_quick_with_atomic!(std::sync::atomic::AtomicUsize, usize);