From 0d88ebe5b9550f0194ca37932e9201e0001fc131 Mon Sep 17 00:00:00 2001 From: Noa <33094578+coolreader18@users.noreply.github.com> Date: Wed, 1 Dec 2021 12:57:11 -0600 Subject: [PATCH 1/2] Upgrade to bitvec 0.22 with const generics --- Cargo.toml | 2 +- src/attribute_set.rs | 26 +++++++++++++++----------- src/scancodes.rs | 15 +-------------- 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1bbb2ad..24206ac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,7 @@ tokio = ["tokio_1", "futures-core"] [dependencies] libc = "0.2.89" -bitvec = "0.21" +bitvec = "0.22" nix = "0.23" tokio_1 = { package = "tokio", version = "1.0", features = ["net"], optional = true } diff --git a/src/attribute_set.rs b/src/attribute_set.rs index ab43865..fac438e 100644 --- a/src/attribute_set.rs +++ b/src/attribute_set.rs @@ -146,34 +146,38 @@ macro_rules! evdev_enum { evdev_enum!( $t, Array:bitvec::BitArr!(for <$t>::COUNT, in u8), - |x| x, - |x| x, bitvec::array::BitArray::as_mut_raw_slice, - bitvec::array::BitArray::zeroed, + bitvec::array::BitArray::zeroed(), + $($(#[$attr])* $c = $val,)* + ); + }; + ($t:ty, box Array, $($(#[$attr:meta])* $c:ident = $val:expr,)*) => { + evdev_enum!( + $t, + Array:Box::COUNT, in u8)>, + bitvec::array::BitArray::as_mut_raw_slice, + Box::new(bitvec::array::BitArray::zeroed()), $($(#[$attr])* $c = $val,)* ); }; ( $t:ty, - Array: $Array:ty, $arr_as_slice:expr, $arr_as_slice_mut:expr, $arr_as_buf:expr, $zero:expr, + Array: $Array:ty, $arr_as_buf:expr, $zero:expr, $($(#[$attr:meta])* $c:ident = $val:expr,)* ) => { impl $crate::attribute_set::ArrayedEvdevEnum for $t { type Array = $Array; fn array_as_slice(arr: &Self::Array) -> &bitvec::slice::BitSlice { - let f: fn(&Self::Array) -> &bitvec::slice::BitSlice = $arr_as_slice; - f(arr) + arr } fn array_as_slice_mut(arr: &mut Self::Array) -> &mut bitvec::slice::BitSlice { - let f: fn(&mut Self::Array) -> &mut bitvec::slice::BitSlice = $arr_as_slice_mut; - f(arr) + arr } fn array_as_buf(arr: &mut Self::Array) -> &mut [u8] { - let f: fn(&mut Self::Array) -> &mut [u8] = $arr_as_buf; - f(arr) + $arr_as_buf(arr) } fn zeroed_array() -> Self::Array { - $zero() + $zero } } evdev_enum!($t, $($(#[$attr])* $c = $val,)*); diff --git a/src/scancodes.rs b/src/scancodes.rs index 254a37f..43fc1a7 100644 --- a/src/scancodes.rs +++ b/src/scancodes.rs @@ -19,22 +19,9 @@ impl Key { pub(crate) const COUNT: usize = libc::KEY_CNT; } -const fn bit_elts(bits: usize) -> usize { - let width = std::mem::size_of::() * 8; - bits / width + (bits % width != 0) as usize -} -// TODO: replace with BitArr!() once const generics is stable and BitView is implemented for any [T; N] -const KEY_ARRAY_LEN: usize = bit_elts::(Key::COUNT); -type KeyArray = [u8; KEY_ARRAY_LEN]; -const KEY_ARRAY_INIT: KeyArray = [0; KEY_ARRAY_LEN]; - evdev_enum!( Key, - Array: Box<[u8; KEY_ARRAY_LEN]>, - |x| bitvec::slice::BitSlice::from_slice(&x[..]).unwrap(), - |x| bitvec::slice::BitSlice::from_slice_mut(&mut x[..]).unwrap(), - |x| &mut x[..], - || Box::new(KEY_ARRAY_INIT), + box Array, KEY_RESERVED = 0, KEY_ESC = 1, KEY_1 = 2, From 6ec00c1e334eab6b62560cdcfe5ad8260e37385c Mon Sep 17 00:00:00 2001 From: Noa <33094578+coolreader18@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:57:59 -0600 Subject: [PATCH 2/2] Normalize some whitespace --- src/attribute_set.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/attribute_set.rs b/src/attribute_set.rs index fac438e..ac47a12 100644 --- a/src/attribute_set.rs +++ b/src/attribute_set.rs @@ -145,7 +145,7 @@ macro_rules! evdev_enum { ($t:ty, Array, $($(#[$attr:meta])* $c:ident = $val:expr,)*) => { evdev_enum!( $t, - Array:bitvec::BitArr!(for <$t>::COUNT, in u8), + Array: bitvec::BitArr!(for <$t>::COUNT, in u8), bitvec::array::BitArray::as_mut_raw_slice, bitvec::array::BitArray::zeroed(), $($(#[$attr])* $c = $val,)* @@ -154,7 +154,7 @@ macro_rules! evdev_enum { ($t:ty, box Array, $($(#[$attr:meta])* $c:ident = $val:expr,)*) => { evdev_enum!( $t, - Array:Box::COUNT, in u8)>, + Array: Box::COUNT, in u8)>, bitvec::array::BitArray::as_mut_raw_slice, Box::new(bitvec::array::BitArray::zeroed()), $($(#[$attr])* $c = $val,)* @@ -189,7 +189,7 @@ macro_rules! evdev_enum { impl std::str::FromStr for $t { type Err = crate::EnumParseError; - fn from_str(s: &str) -> Result { + fn from_str(s: &str) -> Result { let map: &[(&'static str, $t)] = &[ $((stringify!($c), Self::$c),)* ];