From d56f05c680f8c794fbc3dbf7362b7bf540d9598f Mon Sep 17 00:00:00 2001 From: logaritmisk Date: Sat, 6 Jan 2018 22:05:08 +0100 Subject: [PATCH] Variable block size. --- src/block.rs | 31 +++++++++++++++++++++++++++++++ src/lib.rs | 1 + 2 files changed, 32 insertions(+) create mode 100644 src/block.rs diff --git a/src/block.rs b/src/block.rs new file mode 100644 index 0000000..0268b4b --- /dev/null +++ b/src/block.rs @@ -0,0 +1,31 @@ +use std::mem; + +pub trait BitBlock { + const ONE: Self; + const ZERO: Self; + + fn bits() -> usize; + fn count_ones(self) -> usize; +} + +macro_rules! bit_block_impl { + ($(($t: ty, $size: expr)),*) => ($( + impl BitBlock for $t { + const ONE: Self = 1; + const ZERO: Self = 1; + + #[inline] + fn bits() -> usize { $size } + #[inline] + fn count_ones(self) -> usize { self.count_ones() as usize } + } + )*) +} + +bit_block_impl!{ + (u8, 8), + (u16, 16), + (u32, 32), + (u64, 64), + (usize, mem::size_of::() * 8) +} diff --git a/src/lib.rs b/src/lib.rs index 4bc7738..c49ab1c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,7 @@ use serde::ser::SerializeSeq; use serde::de::{SeqAccess, Visitor}; mod hasher; +mod block; use hasher::BitBuildHasher;