1use core::sync::atomic::{
2 AtomicBool, AtomicI8, AtomicI16, AtomicI32, AtomicI64, AtomicIsize, AtomicU8, AtomicU16,
3 AtomicU32, AtomicU64, AtomicUsize,
4};
5
6use crate::{AtomicF32, AtomicF64, IntoAtomic};
7
8pub unsafe trait SameAs<T>: IntoAtomic<AtomicType = T> {}
30
31unsafe impl SameAs<AtomicU8> for u8 {}
32unsafe impl SameAs<AtomicU16> for u16 {}
33unsafe impl SameAs<AtomicU32> for u32 {}
34unsafe impl SameAs<AtomicU64> for u64 {}
35unsafe impl SameAs<AtomicUsize> for usize {}
36
37unsafe impl SameAs<AtomicI8> for i8 {}
38unsafe impl SameAs<AtomicI16> for i16 {}
39unsafe impl SameAs<AtomicI32> for i32 {}
40unsafe impl SameAs<AtomicI64> for i64 {}
41unsafe impl SameAs<AtomicIsize> for isize {}
42
43unsafe impl SameAs<AtomicBool> for bool {}
44
45unsafe impl SameAs<AtomicF32> for f32 {}
46unsafe impl SameAs<AtomicF64> for f64 {}
47
48#[cfg(feature = "half")]
49mod half_same_as {
50 use crate::{AtomicBF16, AtomicF16};
51
52 use super::*;
53 use half::{bf16, f16};
54
55 unsafe impl SameAs<AtomicF16> for f16 {}
56 unsafe impl SameAs<AtomicBF16> for bf16 {}
57}
58
59#[cfg(all(feature = "nightly_f16", not(feature = "half")))]
60mod nightly_f16_same_as {
61 use super::*;
62 use crate::AtomicF16;
63
64 unsafe impl SameAs<AtomicF16> for f16 {}
65}