Try some optimization
This commit is contained in:
parent
a3f17cd2b7
commit
05704d9ba1
|
@ -10,15 +10,16 @@ impl Bitmask {
|
|||
}
|
||||
pub const fn from_alpha(alpha: &u8) -> Self {
|
||||
// 'a' is the LSB, 'Z' is MSB
|
||||
if *alpha <= b'Z' {
|
||||
Self(1 << (alpha - b'A' + 26))
|
||||
} else {
|
||||
Self(1 << (alpha - b'a'))
|
||||
}
|
||||
Self(1 << (alpha - b'A'))
|
||||
}
|
||||
/// Get the priority from a rucksack entry
|
||||
pub const fn to_priority(self) -> super::Prio {
|
||||
self.0.trailing_zeros() as usize + 1
|
||||
let log = self.0.trailing_zeros() as u8;
|
||||
if log < 32 {
|
||||
log as usize + 27
|
||||
} else {
|
||||
log as usize - 31
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,13 +51,21 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn bitmask_works() {
|
||||
assert_eq!(Bitmask::from_alpha(&b'A'), Bitmask(1));
|
||||
assert_eq!(Bitmask::from_alpha(&b'Z'), Bitmask(1 << 25));
|
||||
assert_eq!(Bitmask::from_alpha(&b'a'), Bitmask(1 << 32));
|
||||
assert_eq!(Bitmask::from_alpha(&b'z'), Bitmask(1 << 57));
|
||||
assert_eq!(
|
||||
crate::parse_chars::<String>("abc".into()),
|
||||
Bitmask::from_raw(7)
|
||||
Bitmask((1 << 32) + (1 << 33) + (1 << 34))
|
||||
);
|
||||
assert_eq!(
|
||||
crate::parse_chars::<String>("Z".into()),
|
||||
Bitmask::from_raw(1 << 51)
|
||||
Bitmask::from_raw(1 << 25)
|
||||
);
|
||||
assert_eq!(Bitmask::from_alpha(&b'a').to_priority(), 1);
|
||||
assert_eq!(Bitmask::from_alpha(&b'z').to_priority(), 26);
|
||||
assert_eq!(Bitmask::from_alpha(&b'A').to_priority(), 27);
|
||||
assert_eq!(Bitmask::from_alpha(&b'Z').to_priority(), 52);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue