eta_algorithms/
utils.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#[inline(always)]
pub fn rotate_inc(val: usize, mask: usize) -> usize {
    (val + 1) & mask
}

#[inline(always)]
pub fn rotate_dec(val: usize, mask: usize) -> usize {
    (val - 1) & mask
}

#[inline(always)]
pub fn closest_pow2(mut n: usize) -> usize {
    n -= 1; // In case we have a power of 2
            // This is for setting all the bits to the right to 1

    n |= n >> 1;
    n |= n >> 2;
    n |= n >> 4;
    n |= n >> 8;
    n |= n >> 16;
    n |= n >> 32;
    n + 1
}