File tree 1 file changed +24
-1
lines changed
1 file changed +24
-1
lines changed Original file line number Diff line number Diff line change @@ -74,8 +74,9 @@ macro_rules! benches {
74
74
#[ bench]
75
75
fn $name( bencher: & mut Bencher ) {
76
76
bencher. bytes = $input. len( ) as u64 ;
77
- let vec = $input. as_bytes( ) . to_vec( ) ;
77
+ let mut vec = $input. as_bytes( ) . to_vec( ) ;
78
78
bencher. iter( || {
79
+ black_box( & mut vec) ;
79
80
let $arg = black_box( & vec[ ..] ) ;
80
81
black_box( $body)
81
82
} )
@@ -278,6 +279,28 @@ benches! {
278
279
fn is_ascii_slice_iter_all( bytes: & [ u8 ] ) {
279
280
bytes. iter( ) . all( |b| b. is_ascii( ) )
280
281
}
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
281
304
}
282
305
283
306
macro_rules! repeat {
You can’t perform that action at this time.
0 commit comments