Created
December 21, 2020 11:31
-
-
Save ayosec/0675353357cc3a04424ffab0e1c381e4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct Seqs<I> { | |
iter: I, | |
} | |
impl<'a, I: Iterator<Item = &'a u8>> Iterator for Seqs<std::iter::Enumerate<I>> { | |
type Item = (usize, usize); | |
fn next(&mut self) -> Option<Self::Item> { | |
// Jump to first byte '1' | |
let start = loop { | |
match self.iter.next() { | |
Some((i, b'1')) => break i, | |
None => return None, | |
_ => (), | |
} | |
}; | |
// Find end | |
let mut last_i = start; | |
loop { | |
match self.iter.next() { | |
None => return Some((start, last_i + 1)), | |
Some((i, b'0')) => return Some((start, i)), | |
Some((i, _)) => last_i = i, | |
} | |
} | |
} | |
} | |
fn main() { | |
let x = b"00010110011100111100011111"; | |
let seqs = Seqs { | |
iter: x.iter().enumerate(), | |
}; | |
for seq in seqs { | |
let _ = dbg!(std::str::from_utf8(&x[seq.0..seq.1])); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment