Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pub struct Scanner<R> {
- reader: R,
- buf_str: Vec<u8>,
- offset: usize,
- }
- impl<R: BufRead> Scanner<R> {
- pub fn new(reader: R) -> Self {
- Self {
- reader,
- buf_str: vec![],
- offset: 0,
- }
- }
- pub fn token<T: std::str::FromStr>(&mut self) -> T {
- loop {
- if self.offset < self.buf_str.len() {
- let pos = self.buf_str[self.offset..]
- .iter()
- .position(|&c| c == b' ')
- .unwrap_or(self.buf_str.len() - self.offset);
- let token = std::str::from_utf8(&self.buf_str[self.offset..self.offset + pos])
- .expect("non utf8")
- .trim();
- self.offset += pos + 1;
- return token.parse().ok().expect("Failed parse");
- }
- self.buf_str.clear();
- self.reader
- .read_until(b'\n', &mut self.buf_str)
- .expect("Failed read");
- self.offset = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement