Skip to content

Instantly share code, notes, and snippets.

@DefectingCat
Created April 16, 2024 01:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DefectingCat/71eae8fe9f824737a0910855533da764 to your computer and use it in GitHub Desktop.
Save DefectingCat/71eae8fe9f824737a0910855533da764 to your computer and use it in GitHub Desktop.
Byte iterator
struct ByteIter<'remainder> {
remainder: &'remainder [u8],
}
/* impl<'remainder> ByteIter<'remainder> {
fn next(&mut self) -> Option<&'remainder u8> {
if self.remainder.is_empty() {
None
} else {
let byte = &self.remainder[0];
self.remainder = &self.remainder[1..];
Some(byte)
}
}
} */
impl<'remainder> Iterator for ByteIter<'remainder> {
type Item = &'remainder u8;
fn next(&mut self) -> Option<Self::Item> {
if self.remainder.is_empty() {
None
} else {
let byte = &self.remainder[0];
self.remainder = &self.remainder[1..];
Some(byte)
}
}
}
fn main() {
let mut bytes = ByteIter {
remainder: b"hello world",
};
// bytes.for_each(|byte| println!("byte {}", byte));
assert_eq!(Some(&b'h'), bytes.next());
let byte1 = bytes.next();
let byte2 = bytes.next();
if byte1 == byte2 {}
}
@DefectingCat
Copy link
Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment