graphile_worker_runtime 0.1.3

Async runtime compatibility package for graphile_worker
Documentation
pub(super) const NOTIFY_COUNTER_BITS: usize = (usize::BITS as usize - 1) / 3;
pub(super) const NOTIFY_COUNTER_MASK: usize = (1 << NOTIFY_COUNTER_BITS) - 1;
pub(super) const NOTIFY_PERMIT: usize = 1;
pub(super) const NOTIFY_WAITERS_SHIFT: usize = 1;
pub(super) const NOTIFY_PENDING_SHIFT: usize = NOTIFY_WAITERS_SHIFT + NOTIFY_COUNTER_BITS;
pub(super) const NOTIFY_BROADCAST_SHIFT: usize = NOTIFY_PENDING_SHIFT + NOTIFY_COUNTER_BITS;
pub(super) const NOTIFY_WAITER: usize = 1 << NOTIFY_WAITERS_SHIFT;
pub(super) const NOTIFY_PENDING: usize = 1 << NOTIFY_PENDING_SHIFT;

pub(super) fn notify_has_permit(state: usize) -> bool {
    state & NOTIFY_PERMIT != 0
}

pub(super) fn notify_waiters(state: usize) -> usize {
    (state >> NOTIFY_WAITERS_SHIFT) & NOTIFY_COUNTER_MASK
}

pub(super) fn notify_pending(state: usize) -> usize {
    (state >> NOTIFY_PENDING_SHIFT) & NOTIFY_COUNTER_MASK
}

pub(super) fn notify_broadcast(state: usize) -> usize {
    (state >> NOTIFY_BROADCAST_SHIFT) & NOTIFY_COUNTER_MASK
}

pub(super) fn notify_with_pending(state: usize, pending: usize) -> usize {
    let cleared = state & !(NOTIFY_COUNTER_MASK << NOTIFY_PENDING_SHIFT);
    cleared | (pending << NOTIFY_PENDING_SHIFT)
}

pub(super) fn notify_with_waiters(state: usize, waiters: usize) -> usize {
    let cleared = state & !(NOTIFY_COUNTER_MASK << NOTIFY_WAITERS_SHIFT);
    cleared | (waiters << NOTIFY_WAITERS_SHIFT)
}

pub(super) fn notify_with_broadcast(state: usize, broadcast: usize) -> usize {
    let cleared = state & !(NOTIFY_COUNTER_MASK << NOTIFY_BROADCAST_SHIFT);
    cleared | (broadcast << NOTIFY_BROADCAST_SHIFT)
}