Function hyperloglog_rs::utils::split_registers
source · pub fn split_registers<const NUMBER_OF_REGISTERS_IN_WORD: usize>(
word: u32
) -> [u32; NUMBER_OF_REGISTERS_IN_WORD]Expand description
Split the given registers into an array of bytes where each element corresponds to a register of NUMBER_OF_BITS_PER_REGISTER bits. The number of registers in a single 32-bit registers word is specified by NUMBER_OF_REGISTERS_IN_WORD.
Arguments
- word - A 32-bit word containing the registers to be split.
Returns
An array of bytes where each element corresponds to a register of NUMBER_OF_BITS_PER_REGISTER bits. The length of the returned array is equal to NUMBER_OF_REGISTERS_IN_WORD.
Examples
Split a 32-bit word into 4 8-bit registers
let word = 0b0110_1001_1010_1111_0110_1001_1010_1111;
let registers = split_registers::<4>(word);
let expected = [0b1010_1111, 0b0110_1001, 0b1010_1111, 0b0110_1001];
assert_eq!(registers, expected, "Example 1, Expected: {:?}, got: {:?}", expected, registers);Split a 32-bit word into 2 16-bit registers
let word = 0b1111_0000_1111_0000_1010_1010_0101_0101;
let registers = split_registers::<2>(word);
let expected = [0b1010_1010_0101_0101, 0b1111_0000_1111_0000];
assert_eq!(registers, expected, "Example 2, Expected: {:?}, got: {:?}", expected, registers);Split a 32-bit word into 8 4-bit registers
let word = 0b1010_0101_1111_0000_1111_1111_0101_1010;
let registers = split_registers::<8>(word);
let expected = [0b1010, 0b0101, 0b1111, 0b1111, 0b0000, 0b1111, 0b0101, 0b1010];
assert_eq!(registers, expected, "Example 3, Expected: {:?}, got: {:?}", expected, registers);Split a 32-bit word into 1 32-bit register
let word = 0b1111_1111_0000_0000_1111_0000_1111_1111;
let registers = split_registers::<1>(word);
let expected = [0b1111_1111_0000_0000_1111_0000_1111_1111];
assert_eq!(registers, expected, "Example 4, Expected: {:?}, got: {:?}", expected, registers);