Mercurial > lbo > hg > rcombinators
changeset 14:4122b5f7562b
state: Fix peek() method
author | Lewin Bormann <lewin@lewin-bormann.info> |
---|---|
date | Mon, 03 Jun 2019 23:14:01 +0200 |
parents | 5eb364ffbdcb |
children | 36e01274a263 |
files | src/state.rs |
diffstat | 1 files changed, 13 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/state.rs Sun Jun 02 23:11:00 2019 +0200 +++ b/src/state.rs Mon Jun 03 23:14:01 2019 +0200 @@ -106,16 +106,20 @@ } } pub fn peek(&mut self) -> Option<Iter::Item> { - if self.current + 1 < self.buf.len() { - Some(self.buf[self.current + 1]) - } else { - let c = self.next(); - if c == None { - return None; + if self.current < self.buf.len() { + return Some(self.buf[self.current]); + } else if self.current == self.buf.len() && self.next.is_some() { + match self.next() { + Some(c) => { + self.current -= 1; + return Some(c); + } + None => return None, } - self.current -= 1; - c + } else if self.next.is_none() { + return None; } + unreachable!() } } @@ -147,7 +151,7 @@ use crate::parser::Parser; #[test] - fn init() { + fn test_basic() { let mut s = ParseState::new("Hello"); assert_eq!(Some('H'), s.next()); let rest: String = s.collect();