summaryrefslogtreecommitdiffstats
path: root/src/common/mod.rs
diff options
context:
space:
mode:
authorPaul Masurel <paul.masurel@gmail.com>2016-11-23 19:24:19 +0900
committerPaul Masurel <paul.masurel@gmail.com>2016-11-23 19:24:19 +0900
commitb875b18bd68b5095b41132e800ce924693bc5818 (patch)
treec06b03d547f2f551c724f99210b35f73c7b91757 /src/common/mod.rs
parent382ed2763acf4506535c07a76dc9a19f5bc2a764 (diff)
issue/55 simdcompression is a feature.
Diffstat (limited to 'src/common/mod.rs')
-rw-r--r--src/common/mod.rs34
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