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