6 releases
0.3.1 | Mar 3, 2024 |
---|---|
0.3.0 | Nov 14, 2023 |
0.2.0 | Nov 13, 2023 |
0.1.2 | Oct 18, 2023 |
#173 in Concurrency
16,313 downloads per month
Used in 2 crates
(via esp-wifi)
6KB
portable_atomic_enum
This crate is a fork of atomic_enum and optionally uses
portable-atomic
to support more targets.
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
# use atomic_enum::atomic_enum;
# use std::sync::atomic::Ordering;
#[atomic_enum]
#[derive(Clone, Copy, Debug, 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.
Cargo features
portable-atomic
: polyfill atomic types usingportable-atomic
Dependencies
~0.2–1MB
~20K SLoC