Skip to main content

generic_atomics/
lib.rs

1#![no_std]
2#![doc = include_str!("../README.md")]
3
4use crate::atomic_number::PrimitiveAtomicNumber;
5
6mod atomic_float;
7mod atomic_float_wrapper;
8mod atomic_integer;
9mod atomic_number;
10
11pub use atomic_float::AtomicFloat;
12pub use atomic_float::IntoAtomicFloat;
13pub use atomic_float_wrapper::UseUpdateToAdd;
14pub use atomic_float_wrapper::UseUpdateToMax;
15pub use atomic_float_wrapper::UseUpdateToMin;
16pub use atomic_float_wrapper::UseUpdateToSub;
17pub use atomic_integer::IntoAtomicInteger;
18pub use atomic_number::IntoAtomicNumber;
19
20
21pub use atomic_traits::{
22    fetch::{self },
23    AsPtr, Atomic, Bitwise, FromPtr, NumOps,
24};
25
26#[expect(private_bounds)]
27pub struct AtomicNumber<P: PrimitiveAtomicNumber + Send> {
28    atomic: P::AN,
29}
30
31// i expect all atomics to match their associated type
32// in size and allignment
33const _: [(); core::mem::size_of::<AtomicNumber<u32>>()] = [(); core::mem::size_of::<u32>()];
34const _: [(); core::mem::align_of::<AtomicNumber<u32>>()] = [(); core::mem::align_of::<u32>()];
35const _: [(); core::mem::size_of::<AtomicNumber<f32>>()] = [(); core::mem::size_of::<f32>()];
36const _: [(); core::mem::align_of::<AtomicNumber<f32>>()] = [(); core::mem::align_of::<f32>()];