diff options
author | Paul Masurel <paul.masurel@gmail.com> | 2016-11-23 19:24:19 +0900 |
---|---|---|
committer | Paul Masurel <paul.masurel@gmail.com> | 2016-11-23 19:24:19 +0900 |
commit | b875b18bd68b5095b41132e800ce924693bc5818 (patch) | |
tree | c06b03d547f2f551c724f99210b35f73c7b91757 /src/common/mod.rs | |
parent | 382ed2763acf4506535c07a76dc9a19f5bc2a764 (diff) |
issue/55 simdcompression is a feature.
Diffstat (limited to 'src/common/mod.rs')
-rw-r--r-- | src/common/mod.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/common/mod.rs b/src/common/mod.rs index bf38fee..0c64d5f 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -25,3 +25,37 @@ pub trait HasLen { } } + +fn count_leading_zeros(mut val: u32) -> u8 { + if val == 0 { + return 32; + } + let mut result = 0u8; + while (val & (1u32 << 31)) == 0 { + val <<= 1; + result += 1; + } + result +} + + +pub fn compute_num_bits(amplitude: u32) -> u8 { + 32u8 - count_leading_zeros(amplitude) +} + + + +#[cfg(test)] +mod test { + use super::compute_num_bits; + + fn test_compute_num_bits() { + assert_eq!(compute_num_bits(1), 1u8); + assert_eq!(compute_num_bits(0), 0u8); + assert_eq!(compute_num_bits(2), 2u8); + assert_eq!(compute_num_bits(3), 2u8); + assert_eq!(compute_num_bits(4), 3u8); + assert_eq!(compute_num_bits(255), 8u8); + assert_eq!(compute_num_bits(256), 9u8); + } +}
\ No newline at end of file |