unwrap unchecked
This commit is contained in:
@@ -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
@@ -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'-'
|
||||||
@@ -91,6 +92,7 @@ fn parse_number(number: &[u8]) -> i64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sign * result
|
sign * result
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user