Skip to main content

atomic_primitive/
unsigned.rs

1use crate::PrimitiveAtomicInteger;
2
3/// Marker trait for primitive atomic [unsigned integer types].
4///
5/// Implemented by [`AtomicU8`], [`AtomicU16`], [`AtomicU32`],
6/// [`AtomicUsize`], and, on targets with 64-bit atomics, [`AtomicU64`].
7///
8/// This trait is sealed to prevent downstream implementations.
9///
10/// [`AtomicU8`]: core::sync::atomic::AtomicU8
11/// [`AtomicU16`]: core::sync::atomic::AtomicU16
12/// [`AtomicU32`]: core::sync::atomic::AtomicU32
13/// [`AtomicU64`]: core::sync::atomic::AtomicU64
14/// [`AtomicUsize`]: core::sync::atomic::AtomicUsize
15/// [unsigned integer types]: core::sync::atomic
16pub trait PrimitiveAtomicUnsigned: PrimitiveAtomicInteger {}
17
18#[cfg(target_has_atomic = "64")]
19use core::sync::atomic::AtomicU64;
20use core::sync::atomic::{AtomicU8, AtomicU16, AtomicU32, AtomicUsize};
21
22impl PrimitiveAtomicUnsigned for AtomicU8 {}
23impl PrimitiveAtomicUnsigned for AtomicU16 {}
24impl PrimitiveAtomicUnsigned for AtomicU32 {}
25#[cfg(target_has_atomic = "64")]
26impl PrimitiveAtomicUnsigned for AtomicU64 {}
27impl PrimitiveAtomicUnsigned for AtomicUsize {}