3 unstable releases
0.2.0 | Jul 25, 2022 |
---|---|
0.1.1 | Mar 9, 2020 |
0.1.0 | Dec 6, 2018 |
#398 in Concurrency
9,345 downloads per month
Used in 12 crates
(10 directly)
19KB
286 lines
atomic_enum
An attribute to create an atomic wrapper around a C-style enum.
Internally, the generated wrapper uses an AtomicUsize
to store the value.
The atomic operations have the same semantics as the equivalent operations
of AtomicUsize
.
Example
#[atomic_enum]
#[derive(PartialEq)]
enum CatState {
Dead = 0,
BothDeadAndAlive,
Alive,
}
let state = AtomicCatState::new(CatState::Dead);
state.store(CatState::Alive, Ordering::Relaxed);
assert_eq!(state.load(Ordering::Relaxed), CatState::Alive);
This attribute does not use or generate any unsafe code.
The crate can be used in a #[no_std]
environment.
Maintenance Note
This crate is passively maintained.
lib.rs
:
An attribute to create an atomic wrapper around a C-style enum.
Internally, the generated wrapper uses an AtomicUsize
to store the value.
The atomic operations have the same semantics as the equivalent operations
of AtomicUsize
.
Example
#[atomic_enum]
#[derive(PartialEq)]
enum CatState {
Dead = 0,
BothDeadAndAlive,
Alive,
}
let state = AtomicCatState::new(CatState::Dead);
state.store(CatState::Alive, Ordering::Relaxed);
assert_eq!(state.load(Ordering::Relaxed), CatState::Alive);
This attribute does not use or generate any unsafe code.
The crate can be used in a #[no_std]
environment.
Dependencies
~1MB
~31K SLoC