diff --git a/src/main/rust/src/bin/multi_threaded.rs b/src/main/rust/src/bin/multi_threaded.rs index f132903..0c6e82d 100644 --- a/src/main/rust/src/bin/multi_threaded.rs +++ b/src/main/rust/src/bin/multi_threaded.rs @@ -1,3 +1,5 @@ +#![feature(slice_split_once)] + use std::{ fs::File, io::BufReader, @@ -8,7 +10,7 @@ use std::io::{BufRead, Seek, SeekFrom}; use std::sync::mpsc; use std::time::Instant; -use onebrc::{parse_line, parse_temp}; +use onebrc::parse_temp; const DEFAULT_HASHMAP_LENGTH: usize = 10000; @@ -51,9 +53,9 @@ fn main() { if line_len == 0 { break; } - let (station, temp) = parse_line(&line); + let (station, temp) = line.rsplit_once(|&byte| byte == b';').unwrap(); let station = unsafe { String::from_utf8_unchecked(Vec::from(station)) }; - let temp = parse_temp(temp); + let temp = parse_temp(temp.split_last().unwrap().1); let measurements_option = t_stations.get_mut(&station); if let Some(measurements) = measurements_option { measurements.update(temp); @@ -66,7 +68,7 @@ fn main() { }; t_stations.insert(station, measurements); } - currposition += line.len() as u64; + currposition += line_len as u64; if currposition >= end { break; } diff --git a/src/main/rust/src/bin/single_thread.rs b/src/main/rust/src/bin/single_thread.rs index 82c97d4..2cc93ec 100644 --- a/src/main/rust/src/bin/single_thread.rs +++ b/src/main/rust/src/bin/single_thread.rs @@ -1,10 +1,10 @@ +#![feature(slice_split_once)] + use std::collections::HashMap; use std::fs::File; use std::io::{BufRead, BufReader}; use std::time::Instant; -use onebrc::parse_line; - const DEFAULT_HASHMAP_LENGTH: usize = 10000; fn main() { @@ -20,9 +20,9 @@ fn main() { if line_len == 0 { break; } - let (station, temp) = parse_line(&line); + let (station, temp) = line.rsplit_once(|&byte| byte == b';').unwrap(); let station = unsafe { String::from_utf8_unchecked(Vec::from(station)) }; - let temp = onebrc::parse_temp(temp); + let temp = onebrc::parse_temp(temp.split_last().unwrap().1); let measurements_option = stations.get_mut(&station); if let Some(measurements) = measurements_option { measurements.update(temp);