From cf0f6ec2870ab8d9c7339fe72a536c526003263f Mon Sep 17 00:00:00 2001 From: turbocooler Date: Fri, 7 Jan 2022 00:02:18 +0300 Subject: [PATCH 1/3] Implement PhfHash for arrays of any size. --- phf_shared/src/lib.rs | 58 +++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 38 deletions(-) diff --git a/phf_shared/src/lib.rs b/phf_shared/src/lib.rs index 31e37020..aad9bb1e 100644 --- a/phf_shared/src/lib.rs +++ b/phf_shared/src/lib.rs @@ -364,26 +364,28 @@ impl PhfHash for char { } // minimize duplicated code since formatting drags in quite a bit -fn fmt_array(array: &[u8], f: &mut fmt::Formatter<'_>) -> fmt::Result { +fn fmt_array(array: &[T], f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", array) } macro_rules! array_impl ( - ($t:ty, $n:expr) => ( - impl PhfHash for [$t; $n] { + ($t:ty) => ( + impl PhfHash for [$t; N] { #[inline] fn phf_hash(&self, state: &mut H) { - state.write(self); + for v in self { + v.phf_hash(state); + } } } - impl FmtConst for [$t; $n] { + impl FmtConst for [$t; N] { fn fmt_const(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt_array(self, f) } } - impl PhfBorrow<[$t]> for [$t; $n] { + impl PhfBorrow<[$t]> for [$t; N] { fn borrow(&self) -> &[$t] { self } @@ -391,35 +393,15 @@ macro_rules! array_impl ( ) ); -array_impl!(u8, 1); -array_impl!(u8, 2); -array_impl!(u8, 3); -array_impl!(u8, 4); -array_impl!(u8, 5); -array_impl!(u8, 6); -array_impl!(u8, 7); -array_impl!(u8, 8); -array_impl!(u8, 9); -array_impl!(u8, 10); -array_impl!(u8, 11); -array_impl!(u8, 12); -array_impl!(u8, 13); -array_impl!(u8, 14); -array_impl!(u8, 15); -array_impl!(u8, 16); -array_impl!(u8, 17); -array_impl!(u8, 18); -array_impl!(u8, 19); -array_impl!(u8, 20); -array_impl!(u8, 21); -array_impl!(u8, 22); -array_impl!(u8, 23); -array_impl!(u8, 24); -array_impl!(u8, 25); -array_impl!(u8, 26); -array_impl!(u8, 27); -array_impl!(u8, 28); -array_impl!(u8, 29); -array_impl!(u8, 30); -array_impl!(u8, 31); -array_impl!(u8, 32); +array_impl!(u8); +array_impl!(i8); +array_impl!(u16); +array_impl!(i16); +array_impl!(u32); +array_impl!(i32); +array_impl!(u64); +array_impl!(i64); +array_impl!(u128); +array_impl!(i128); +array_impl!(bool); +array_impl!(char); From ee82cc994573fbb774a0006f13bceb871710fdb6 Mon Sep 17 00:00:00 2001 From: turbocooler Date: Fri, 7 Jan 2022 02:15:26 +0300 Subject: [PATCH 2/3] Fix build issues. --- phf_shared/src/lib.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/phf_shared/src/lib.rs b/phf_shared/src/lib.rs index aad9bb1e..37cce318 100644 --- a/phf_shared/src/lib.rs +++ b/phf_shared/src/lib.rs @@ -364,7 +364,7 @@ impl PhfHash for char { } // minimize duplicated code since formatting drags in quite a bit -fn fmt_array(array: &[T], f: &mut fmt::Formatter<'_>) -> fmt::Result { +fn fmt_array(array: &[T], f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", array) } @@ -373,19 +373,19 @@ macro_rules! array_impl ( impl PhfHash for [$t; N] { #[inline] fn phf_hash(&self, state: &mut H) { - for v in self { + for v in &self[..] { v.phf_hash(state); } } } - impl FmtConst for [$t; N] { + impl FmtConst for [$t; N] { fn fmt_const(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt_array(self, f) } } - impl PhfBorrow<[$t]> for [$t; N] { + impl PhfBorrow<[$t]> for [$t; N] { fn borrow(&self) -> &[$t] { self } From 856ab9de8a5b5be443e084c17f9029e5edc8f760 Mon Sep 17 00:00:00 2001 From: turbocooler Date: Fri, 7 Jan 2022 02:22:06 +0300 Subject: [PATCH 3/3] Bump MSRV. --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f720a391..d628a42c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: # MSRV and nightly - version: [1.46.0, nightly] + version: [1.51.0, nightly] steps: - uses: actions/checkout@v2 @@ -23,7 +23,7 @@ jobs: rustup override set ${{ matrix.version }} - name: Rustfmt check - if: matrix.version == '1.46.0' + if: matrix.version == '1.51.0' run: | rustup component add rustfmt cargo fmt --all -- --check @@ -32,7 +32,7 @@ jobs: run: cargo test --workspace --exclude=phf_codegen_test - name: phf_macros UI test - if: matrix.version == '1.46.0' + if: matrix.version == '1.51.0' working-directory: phf_macros_tests run: cargo test -- --ignored --test-threads=1