Skip to content

Commit 5dc85ad

Browse files
committed
rustfmt
1 parent 5c13966 commit 5dc85ad

5 files changed

Lines changed: 57 additions & 51 deletions

File tree

src/integer_simd.rs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ unsafe fn usize_load_unchecked(bytes: &[u8], offset: usize) -> usize {
1313
ptr::copy_nonoverlapping(
1414
bytes.as_ptr().add(offset),
1515
&mut output as *mut usize as *mut u8,
16-
mem::size_of::<usize>()
16+
mem::size_of::<usize>(),
1717
);
1818
output
1919
}
@@ -65,11 +65,17 @@ pub fn chunk_count(haystack: &[u8], needle: u8) -> usize {
6565
// 8
6666
let mut counts = 0;
6767
for i in 0..(haystack.len() - offset) / chunksize {
68-
counts += bytewise_equal(usize_load_unchecked(haystack, offset + i * chunksize), needles);
68+
counts += bytewise_equal(
69+
usize_load_unchecked(haystack, offset + i * chunksize),
70+
needles,
71+
);
6972
}
7073
if haystack.len() % 8 != 0 {
7174
let mask = usize::from_le(!(!0 >> ((haystack.len() % chunksize) * 8)));
72-
counts += bytewise_equal(usize_load_unchecked(haystack, haystack.len() - chunksize), needles) & mask;
75+
counts += bytewise_equal(
76+
usize_load_unchecked(haystack, haystack.len() - chunksize),
77+
needles,
78+
) & mask;
7379
}
7480
count += sum_usize(counts);
7581

@@ -98,11 +104,15 @@ pub fn chunk_num_chars(utf8_chars: &[u8]) -> usize {
98104
// 8
99105
let mut counts = 0;
100106
for i in 0..(utf8_chars.len() - offset) / chunksize {
101-
counts += is_leading_utf8_byte(usize_load_unchecked(utf8_chars, offset + i * chunksize));
107+
counts +=
108+
is_leading_utf8_byte(usize_load_unchecked(utf8_chars, offset + i * chunksize));
102109
}
103110
if utf8_chars.len() % 8 != 0 {
104111
let mask = usize::from_le(!(!0 >> ((utf8_chars.len() % chunksize) * 8)));
105-
counts += is_leading_utf8_byte(usize_load_unchecked(utf8_chars, utf8_chars.len() - chunksize)) & mask;
112+
counts += is_leading_utf8_byte(usize_load_unchecked(
113+
utf8_chars,
114+
utf8_chars.len() - chunksize,
115+
)) & mask;
106116
}
107117
count += sum_usize(counts);
108118

src/naive.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ pub fn naive_count_32(haystack: &[u8], needle: u8) -> usize {
2222
/// assert_eq!(number_of_spaces, 6);
2323
/// ```
2424
pub fn naive_count(utf8_chars: &[u8], needle: u8) -> usize {
25-
utf8_chars.iter().fold(0, |n, c| n + (*c == needle) as usize)
25+
utf8_chars
26+
.iter()
27+
.fold(0, |n, c| n + (*c == needle) as usize)
2628
}
2729

2830
/// Count the number of UTF-8 encoded Unicode codepoints in a slice of bytes, simple
@@ -38,5 +40,8 @@ pub fn naive_count(utf8_chars: &[u8], needle: u8) -> usize {
3840
/// assert_eq!(char_count, 4);
3941
/// ```
4042
pub fn naive_num_chars(utf8_chars: &[u8]) -> usize {
41-
utf8_chars.iter().filter(|&&byte| (byte >> 6) != 0b10).count()
43+
utf8_chars
44+
.iter()
45+
.filter(|&&byte| (byte >> 6) != 0b10)
46+
.count()
4247
}

src/simd/generic.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@ use std::mem;
88
use self::packed_simd::{u8x32, u8x64, FromCast};
99

1010
const MASK: [u8; 64] = [
11-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
13-
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
14-
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
11+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12+
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
13+
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1514
];
1615

1716
unsafe fn u8x64_from_offset(slice: &[u8], offset: usize) -> u8x64 {
@@ -66,15 +65,17 @@ pub fn chunk_count(haystack: &[u8], needle: u8) -> usize {
6665
// 32
6766
let mut counts = u8x32::splat(0);
6867
for i in 0..(haystack.len() - offset) / 32 {
69-
counts -= u8x32::from_cast(u8x32_from_offset(haystack, offset + i * 32).eq(needles_x32));
68+
counts -=
69+
u8x32::from_cast(u8x32_from_offset(haystack, offset + i * 32).eq(needles_x32));
7070
}
7171
count += sum_x32(&counts);
7272

7373
// Straggler; need to reset counts because prior loop can run 255 times
7474
counts = u8x32::splat(0);
7575
if haystack.len() % 32 != 0 {
76-
counts -= u8x32::from_cast(u8x32_from_offset(haystack, haystack.len() - 32).eq(needles_x32)) &
77-
u8x32_from_offset(&MASK, haystack.len() % 32);
76+
counts -=
77+
u8x32::from_cast(u8x32_from_offset(haystack, haystack.len() - 32).eq(needles_x32))
78+
& u8x32_from_offset(&MASK, haystack.len() % 32);
7879
}
7980
count += sum_x32(&counts);
8081

@@ -127,8 +128,9 @@ pub fn chunk_num_chars(utf8_chars: &[u8]) -> usize {
127128
// Straggler; need to reset counts because prior loop can run 255 times
128129
counts = u8x32::splat(0);
129130
if utf8_chars.len() % 32 != 0 {
130-
counts -= is_leading_utf8_byte_x32(u8x32_from_offset(utf8_chars, utf8_chars.len() - 32)) &
131-
u8x32_from_offset(&MASK, utf8_chars.len() % 32);
131+
counts -=
132+
is_leading_utf8_byte_x32(u8x32_from_offset(utf8_chars, utf8_chars.len() - 32))
133+
& u8x32_from_offset(&MASK, utf8_chars.len() % 32);
132134
}
133135
count += sum_x32(&counts);
134136

src/simd/x86_avx2.rs

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
use std::arch::x86_64::{
2-
__m256i,
3-
_mm256_and_si256,
4-
_mm256_cmpeq_epi8,
5-
_mm256_extract_epi64,
6-
_mm256_loadu_si256,
7-
_mm256_sad_epu8,
8-
_mm256_set1_epi8,
9-
_mm256_setzero_si256,
10-
_mm256_sub_epi8,
11-
_mm256_xor_si256,
2+
__m256i, _mm256_and_si256, _mm256_cmpeq_epi8, _mm256_extract_epi64, _mm256_loadu_si256,
3+
_mm256_sad_epu8, _mm256_set1_epi8, _mm256_setzero_si256, _mm256_sub_epi8, _mm256_xor_si256,
124
};
135

146
#[target_feature(enable = "avx2")]
@@ -22,10 +14,9 @@ pub unsafe fn mm256_cmpneq_epi8(a: __m256i, b: __m256i) -> __m256i {
2214
}
2315

2416
const MASK: [u8; 64] = [
25-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
26-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
27-
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
28-
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
17+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
18+
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
19+
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2920
];
3021

3122
#[target_feature(enable = "avx2")]
@@ -36,10 +27,10 @@ unsafe fn mm256_from_offset(slice: &[u8], offset: usize) -> __m256i {
3627
#[target_feature(enable = "avx2")]
3728
unsafe fn sum(u8s: &__m256i) -> usize {
3829
let sums = _mm256_sad_epu8(*u8s, _mm256_setzero_si256());
39-
(
40-
_mm256_extract_epi64(sums, 0) + _mm256_extract_epi64(sums, 1) +
41-
_mm256_extract_epi64(sums, 2) + _mm256_extract_epi64(sums, 3)
42-
) as usize
30+
(_mm256_extract_epi64(sums, 0)
31+
+ _mm256_extract_epi64(sums, 1)
32+
+ _mm256_extract_epi64(sums, 2)
33+
+ _mm256_extract_epi64(sums, 3)) as usize
4334
}
4435

4536
#[target_feature(enable = "avx2")]
@@ -57,7 +48,7 @@ pub unsafe fn chunk_count(haystack: &[u8], needle: u8) -> usize {
5748
for _ in 0..255 {
5849
counts = _mm256_sub_epi8(
5950
counts,
60-
_mm256_cmpeq_epi8(mm256_from_offset(haystack, offset), needles)
51+
_mm256_cmpeq_epi8(mm256_from_offset(haystack, offset), needles),
6152
);
6253
offset += 32;
6354
}
@@ -70,7 +61,7 @@ pub unsafe fn chunk_count(haystack: &[u8], needle: u8) -> usize {
7061
for _ in 0..128 {
7162
counts = _mm256_sub_epi8(
7263
counts,
73-
_mm256_cmpeq_epi8(mm256_from_offset(haystack, offset), needles)
64+
_mm256_cmpeq_epi8(mm256_from_offset(haystack, offset), needles),
7465
);
7566
offset += 32;
7667
}
@@ -82,16 +73,16 @@ pub unsafe fn chunk_count(haystack: &[u8], needle: u8) -> usize {
8273
for i in 0..(haystack.len() - offset) / 32 {
8374
counts = _mm256_sub_epi8(
8475
counts,
85-
_mm256_cmpeq_epi8(mm256_from_offset(haystack, offset + i * 32), needles)
76+
_mm256_cmpeq_epi8(mm256_from_offset(haystack, offset + i * 32), needles),
8677
);
8778
}
8879
if haystack.len() % 32 != 0 {
8980
counts = _mm256_sub_epi8(
9081
counts,
9182
_mm256_and_si256(
9283
_mm256_cmpeq_epi8(mm256_from_offset(haystack, haystack.len() - 32), needles),
93-
mm256_from_offset(&MASK, haystack.len() % 32)
94-
)
84+
mm256_from_offset(&MASK, haystack.len() % 32),
85+
),
9586
);
9687
}
9788
count += sum(&counts);
@@ -101,7 +92,10 @@ pub unsafe fn chunk_count(haystack: &[u8], needle: u8) -> usize {
10192

10293
#[target_feature(enable = "avx2")]
10394
unsafe fn is_leading_utf8_byte(u8s: __m256i) -> __m256i {
104-
mm256_cmpneq_epi8(_mm256_and_si256(u8s, _mm256_set1_epu8(0b1100_0000)), _mm256_set1_epu8(0b1000_0000))
95+
mm256_cmpneq_epi8(
96+
_mm256_and_si256(u8s, _mm256_set1_epu8(0b1100_0000)),
97+
_mm256_set1_epu8(0b1000_0000),
98+
)
10599
}
106100

107101
#[target_feature(enable = "avx2")]
@@ -118,7 +112,7 @@ pub unsafe fn chunk_num_chars(utf8_chars: &[u8]) -> usize {
118112
for _ in 0..255 {
119113
counts = _mm256_sub_epi8(
120114
counts,
121-
is_leading_utf8_byte(mm256_from_offset(utf8_chars, offset))
115+
is_leading_utf8_byte(mm256_from_offset(utf8_chars, offset)),
122116
);
123117
offset += 32;
124118
}
@@ -131,7 +125,7 @@ pub unsafe fn chunk_num_chars(utf8_chars: &[u8]) -> usize {
131125
for _ in 0..128 {
132126
counts = _mm256_sub_epi8(
133127
counts,
134-
is_leading_utf8_byte(mm256_from_offset(utf8_chars, offset))
128+
is_leading_utf8_byte(mm256_from_offset(utf8_chars, offset)),
135129
);
136130
offset += 32;
137131
}
@@ -143,16 +137,16 @@ pub unsafe fn chunk_num_chars(utf8_chars: &[u8]) -> usize {
143137
for i in 0..(utf8_chars.len() - offset) / 32 {
144138
counts = _mm256_sub_epi8(
145139
counts,
146-
is_leading_utf8_byte(mm256_from_offset(utf8_chars, offset + i * 32))
140+
is_leading_utf8_byte(mm256_from_offset(utf8_chars, offset + i * 32)),
147141
);
148142
}
149143
if utf8_chars.len() % 32 != 0 {
150144
counts = _mm256_sub_epi8(
151145
counts,
152146
_mm256_and_si256(
153147
is_leading_utf8_byte(mm256_from_offset(utf8_chars, utf8_chars.len() - 32)),
154-
mm256_from_offset(&MASK, utf8_chars.len() % 32)
155-
)
148+
mm256_from_offset(&MASK, utf8_chars.len() % 32),
149+
),
156150
);
157151
}
158152
count += sum(&counts);

tests/check.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@ extern crate bytecount;
33
extern crate quickcheck;
44
extern crate rand;
55

6-
use bytecount::{
7-
count, naive_count,
8-
num_chars, naive_num_chars,
9-
};
6+
use bytecount::{count, naive_count, naive_num_chars, num_chars};
107
use rand::RngCore;
118

129
fn random_bytes(len: usize) -> Vec<u8> {
@@ -59,8 +56,6 @@ fn check_count_overflow_many() {
5956
}
6057
}
6158

62-
63-
6459
quickcheck! {
6560
fn check_num_chars_correct(haystack: Vec<u8>) -> bool {
6661
num_chars(&haystack) == naive_num_chars(&haystack)

0 commit comments

Comments
 (0)