RUA!
Avatar

DefectingCat/byte_iter_fixed.rs

Last active: a year ago

Byte iterator

byte_iter_fixed.rs
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 {}
}