Skip to content

Commit 77385e8

Browse files
committed
Initial work on turning BitColumnMatrix32 into BitColumnMatrix<T>
Current Rust 1.45.2 doesn't support this. So need to wait until Rust is improved. rust-lang/rust#43408
1 parent 17fbb32 commit 77385e8

File tree

1 file changed

+33
-3
lines changed

1 file changed

+33
-3
lines changed

src/bitcolumnmatrix.rs

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,42 @@
11
use num_traits::{PrimInt, Unsigned, Zero, One};
22
use std::ops::{BitAnd};
33

4+
5+
trait BitWidth {
6+
const BIT_WIDTH: usize;
7+
}
8+
9+
impl BitWidth for u128 {
10+
const BIT_WIDTH: usize = 128;
11+
}
12+
13+
impl BitWidth for u64 {
14+
const BIT_WIDTH: usize = 64;
15+
}
16+
17+
impl BitWidth for u32 {
18+
const BIT_WIDTH: usize = 32;
19+
}
20+
21+
impl BitWidth for u16 {
22+
const BIT_WIDTH: usize = 16;
23+
}
24+
25+
impl BitWidth for u8 {
26+
const BIT_WIDTH: usize = 8;
27+
}
28+
29+
430
#[derive(Clone)]
5-
pub struct BitColumnMatrix32 {
6-
columns: [u32; 32],
31+
pub struct BitColumnMatrix<T>
32+
where T: PrimInt + Unsigned + std::marker::Sized,
33+
{
34+
columns: [T; std::mem::size_of::<T>() * 8],
735
}
836

9-
impl BitColumnMatrix32 {
37+
impl<T> BitColumnMatrix<T>
38+
where T: BitWidth,
39+
{
1040
const WIDTH: usize = 32;
1141

1242
pub fn new(init_data: &[u32; 32]) -> BitColumnMatrix32 {

0 commit comments

Comments
 (0)