use core::sync::atomic::Ordering;
macro_rules! impl_fast_zeroize_atomic_int {
($($ty:ty => $zero:expr),* $(,)?) => {
$(
impl crate::traits::ZeroizationProbe for $ty {
#[inline(always)]
fn is_zeroized(&self) -> bool {
self.load(Ordering::Relaxed) == $zero
}
}
impl crate::traits::ZeroizeMetadata for $ty {
const CAN_BE_BULK_ZEROIZED: bool = false;
}
impl crate::traits::FastZeroizable for $ty {
#[inline(always)]
fn fast_zeroize(&mut self) {
self.store($zero, Ordering::Relaxed);
}
}
)*
};
}
use core::sync::atomic::{AtomicBool, AtomicI8, AtomicI16, AtomicI32, AtomicI64, AtomicIsize};
use core::sync::atomic::{AtomicU8, AtomicU16, AtomicU32, AtomicU64, AtomicUsize};
impl_fast_zeroize_atomic_int!(
AtomicBool => false,
AtomicU8 => 0,
AtomicU16 => 0,
AtomicU32 => 0,
AtomicU64 => 0,
AtomicUsize => 0,
AtomicI8 => 0,
AtomicI16 => 0,
AtomicI32 => 0,
AtomicI64 => 0,
AtomicIsize => 0,
);