unwrap unchecked

This commit is contained in:
timeshifter
2026-07-09 17:22:05 +02:00
parent be1cf6b52b
commit 658abdb082
2 changed files with 24 additions and 21 deletions
+1
View File
@@ -5,3 +5,4 @@
95 FxHashMap 95 FxHashMap
71 mmap, reduced UTF8 parsing (names) 71 mmap, reduced UTF8 parsing (names)
50 manual number parsing 50 manual number parsing
48 unchecked unwrap
+10 -8
View File
@@ -29,9 +29,9 @@ fn main() {
let line = &mmap[pointer..pointer + length]; let line = &mmap[pointer..pointer + length];
let mut split = line.split(|&c| c == b';'); let mut split = line.split(|&c| c == b';');
let station = split.next().unwrap(); let station = unsafe { split.next().unwrap_unchecked() };
let number = split.next().unwrap(); let number = unsafe { split.next().unwrap_unchecked() };
let parsed = parse_number(number); let parsed = unsafe { parse_number(number) };
// panic!(); // panic!();
data.entry(station) data.entry(station)
@@ -70,8 +70,9 @@ fn main() {
println!("}}"); println!("}}");
} }
fn parse_number(number: &[u8]) -> i64 { unsafe fn parse_number(number: &[u8]) -> i64 {
let sign = if *number.first().unwrap() == b'-' { unsafe {
let sign = if *number.first().unwrap_unchecked() == b'-' {
-1 -1
} else { } else {
1 1
@@ -80,9 +81,9 @@ fn parse_number(number: &[u8]) -> i64 {
let mut iter = number.iter().rev(); let mut iter = number.iter().rev();
// 48: ASCII '0' // 48: ASCII '0'
let mut result = (iter.next().unwrap() - 48) as i64; let mut result = (iter.next().unwrap_unchecked() - 48) as i64;
iter.next(); // skip '.' iter.next(); // skip '.'
result += ((iter.next().unwrap() - 48) as i64) * 10; result += ((iter.next().unwrap_unchecked() - 48) as i64) * 10;
if let Some(hundreds) = iter.next() if let Some(hundreds) = iter.next()
&& *hundreds != b'-' && *hundreds != b'-'
@@ -92,6 +93,7 @@ fn parse_number(number: &[u8]) -> i64 {
sign * result sign * result
} }
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
@@ -100,6 +102,6 @@ mod tests {
#[test] #[test]
fn test_parse_number() { fn test_parse_number() {
let input = [49, 53, 46, 51]; // "15.3" let input = [49, 53, 46, 51]; // "15.3"
assert_eq!(parse_number(&input), 153); assert_eq!(unsafe { parse_number(&input) }, 153);
} }
} }