crossync 0.1.2

A fast concurrent programming suite for Rust.
Documentation
use std::sync::atomic::AtomicUsize;
use windows_sys::Win32::System::Threading::INFINITE;
use windows_sys::Win32::System::Threading::{WaitOnAddress, WakeByAddressAll, WakeByAddressSingle};

#[inline]
pub(crate) fn wait(a: &AtomicUsize, expected: usize) {
    let ptr: *const AtomicUsize = a;
    let expected_ptr: *const usize = &expected;
    unsafe { WaitOnAddress(ptr.cast(), expected_ptr.cast(), size_of::<usize>(), INFINITE) };
}

#[inline]
pub(crate) fn wake_one(ptr: *const AtomicUsize) {
    unsafe { WakeByAddressSingle(ptr.cast()) };
}

#[inline]
pub(crate) fn wake_all(ptr: *const AtomicUsize) {
    unsafe { WakeByAddressAll(ptr.cast()) };
}