This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 1 file changed +24
-1
lines changed Expand file tree Collapse file tree 1 file changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -74,8 +74,9 @@ macro_rules! benches {
7474 #[ bench]
7575 fn $name( bencher: & mut Bencher ) {
7676 bencher. bytes = $input. len( ) as u64 ;
77- let vec = $input. as_bytes( ) . to_vec( ) ;
77+ let mut vec = $input. as_bytes( ) . to_vec( ) ;
7878 bencher. iter( || {
79+ black_box( & mut vec) ;
7980 let $arg = black_box( & vec[ ..] ) ;
8081 black_box( $body)
8182 } )
@@ -278,6 +279,28 @@ benches! {
278279 fn is_ascii_slice_iter_all( bytes: & [ u8 ] ) {
279280 bytes. iter( ) . all( |b| b. is_ascii( ) )
280281 }
282+
283+ fn is_ascii_slice_align_to( bytes: & [ u8 ] ) {
284+ is_ascii_align_to_impl( bytes)
285+ }
286+ }
287+
288+ // Separate since it's easier to debug errors if they don't go through macro
289+ // expansion first.
290+ fn is_ascii_align_to_impl ( bytes : & [ u8 ] ) -> bool {
291+ if bytes. len ( ) < core:: mem:: size_of :: < usize > ( ) {
292+ return bytes. iter ( ) . all ( |b| b. is_ascii ( ) ) ;
293+ }
294+ let ( head, body, tail) = unsafe { bytes. align_to :: < usize > ( ) } ;
295+ head. iter ( ) . all ( |b| b. is_ascii ( ) ) &&
296+ body. iter ( ) . all ( |w| !contains_nonascii ( * w) ) &&
297+ tail. iter ( ) . all ( |b| b. is_ascii ( ) )
298+ }
299+
300+ #[ inline]
301+ fn contains_nonascii ( v : usize ) -> bool {
302+ const NONASCII_MASK : usize = 0x80808080_80808080u64 as usize ;
303+ ( NONASCII_MASK & v) != 0
281304}
282305
283306macro_rules! repeat {
You can’t perform that action at this time.
0 commit comments