vsimd/
algorithm.rs

1pub const fn lookup(lut: &[u8; 16], x: u8) -> u8 {
2    if x < 0x80 {
3        lut[(x & 0x0f) as usize]
4    } else {
5        0
6    }
7}
8
9pub const fn avgr(a: u8, b: u8) -> u8 {
10    ((a as u16 + b as u16 + 1) >> 1) as u8
11}
12
13#[cfg(test)]
14pub fn print_fn_table(is_primary: impl Fn(u8) -> bool, f: impl Fn(u8) -> u8) {
15    print!("     0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F");
16    for c in 0..=255u8 {
17        let val = f(c);
18
19        if c & 0x0f == 0 {
20            println!();
21            print!("{:x} | ", c >> 4);
22        }
23
24        if is_primary(c) {
25            print!("\x1b[1;31m{val:0>2X}\x1b[0m  ");
26        } else if val >= 0x80 {
27            print!("\x1b[1;36m{val:0>2X}\x1b[0m  ");
28        } else {
29            print!("\x1b[1;32m{val:0>2X}\x1b[0m  ");
30        }
31    }
32    println!();
33    println!();
34}
35
36#[cfg(test)]
37pub fn i8_lt(a: i8, b: i8) -> u8 {
38    if a < b {
39        0xff
40    } else {
41        0x00
42    }
43}