Skip to content

Commit 09f1d65

Browse files
committed
do not use Ord::cmp; it is slower than an if-else sequence
1 parent 3c84886 commit 09f1d65

File tree

1 file changed

+22
-20
lines changed

1 file changed

+22
-20
lines changed

libbz2-rs-sys/src/blocksort.rs

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -125,30 +125,32 @@ fn fallbackQSort3(fmap: &mut [u32], eclass: &[u32], loSt: i32, hiSt: i32) {
125125

126126
loop {
127127
while unLo <= unHi {
128-
match eclass[fmap[unLo as usize] as usize].cmp(&med) {
129-
Ordering::Greater => break,
130-
Ordering::Equal => {
131-
fmap.swap(unLo as usize, ltLo as usize);
132-
ltLo += 1;
133-
unLo += 1;
134-
}
135-
Ordering::Less => {
136-
unLo += 1;
137-
}
128+
let a = eclass[fmap[unLo as usize] as usize];
129+
let b = med;
130+
131+
if a > b {
132+
break;
133+
} else if a == b {
134+
fmap.swap(unLo as usize, ltLo as usize);
135+
ltLo += 1;
136+
unLo += 1;
137+
} else {
138+
unLo += 1;
138139
}
139140
}
140141

141142
while unLo <= unHi {
142-
match eclass[fmap[unHi as usize] as usize].cmp(&med) {
143-
Ordering::Less => break,
144-
Ordering::Equal => {
145-
fmap.swap(unHi as usize, gtHi as usize);
146-
gtHi -= 1;
147-
unHi -= 1;
148-
}
149-
Ordering::Greater => {
150-
unHi -= 1;
151-
}
143+
let a = eclass[fmap[unHi as usize] as usize];
144+
let b = med;
145+
146+
if a < b {
147+
break;
148+
} else if a == b {
149+
fmap.swap(unHi as usize, gtHi as usize);
150+
gtHi -= 1;
151+
unHi -= 1;
152+
} else {
153+
unHi -= 1;
152154
}
153155
}
154156

0 commit comments

Comments
 (0)