From 9daecc56ea29fe2b500cd172759be707fe375943 Mon Sep 17 00:00:00 2001 From: Michael Pfaff Date: Tue, 6 Jun 2023 20:54:41 -0400 Subject: [PATCH] More ergonomic interface, clear defaults --- src/dec.rs | 26 +++++++++++++++++++++++++- src/lib.rs | 4 +++- src/prelude.rs | 1 + 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/dec.rs b/src/dec.rs index a10ada4..50524f8 100644 --- a/src/dec.rs +++ b/src/dec.rs @@ -297,7 +297,7 @@ fn decode_hex_bytes_unchecked(ascii: &[u8], bytes: &mut [MaybeUninit]) -> bo return false; } - const VECTORED: bool = true; + const VECTORED: bool = false; if VECTORED { unsafe { arch::_mm_prefetch(ASCII_DIGITS_SIMD as *const i8, arch::_MM_HINT_T0) }; let mut bad: arch::__m256i = u8::splat_zero().into(); @@ -438,6 +438,30 @@ pub fn hex_bytes_dyn(ascii: &[u8]) -> Option> { .map(|v| v.into_boxed_slice()) } +pub struct Decoder; + +impl Decoder { + #[inline] + pub fn decode_sized(ascii: &[u8; N * 2]) -> Option<[u8; N]> { + // benchmarks show this to be fastest + hex_bytes_sized_const(ascii) + } + + #[cfg(feature = "alloc")] + #[inline] + pub fn decode_sized_heap(ascii: &[u8; N * 2]) -> Option> { + // benchmarks show this to be fastest + hex_bytes_sized_heap(ascii) + } + + #[cfg(feature = "alloc")] + #[inline] + pub fn decode(ascii: &[u8]) -> Option> { + // benchmarks show this to be fastest + hex_bytes_dyn_unsafe_iter(ascii) + } +} + #[cfg(test)] mod test { use super::*; diff --git a/src/lib.rs b/src/lib.rs index 8e185dc..6bab972 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,7 +6,6 @@ #![feature(const_trait_impl)] #![feature(extend_one)] #![feature(generic_const_exprs)] -#![feature(int_log)] #![feature(maybe_uninit_slice)] #![feature(maybe_uninit_uninit_array)] #![feature(maybe_uninit_array_assume_init)] @@ -31,3 +30,6 @@ pub mod dec; pub mod enc; pub mod prelude; + +pub use dec::Decoder; +pub use enc::{Encode, Encoder}; diff --git a/src/prelude.rs b/src/prelude.rs index 930e206..d04628b 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -6,4 +6,5 @@ pub(crate) use brisk::util; pub(crate) use crate::defs::*; +pub use crate::dec::Decoder as HexDecoder; pub use crate::enc::{Encode as _, Encoder as HexEncoder};