From 20909cdfd6e83d1e3d12e875d461994aa3c49cee Mon Sep 17 00:00:00 2001 From: David Hoppenbrouwers Date: Thu, 8 Sep 2022 13:08:45 +0200 Subject: [PATCH] Remove usage page stack Apparently the whole stack thing only applies to Push/Pop items. --- report_descriptor/src/lib.rs | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/report_descriptor/src/lib.rs b/report_descriptor/src/lib.rs index 4800daf..9ceb2eb 100644 --- a/report_descriptor/src/lib.rs +++ b/report_descriptor/src/lib.rs @@ -249,13 +249,11 @@ impl Collection { pub enum ParseError { Truncated, UnexpectedData, - StackOverflow, } pub struct Parser<'a> { data: &'a [u8], - usage_page: [u16; 16], - stack_index: usize, + usage_page: u16, } impl<'a> Iterator for Parser<'a> { @@ -263,23 +261,10 @@ impl<'a> Iterator for Parser<'a> { fn next(&mut self) -> Option { (!self.data.is_empty()).then(|| { - use ParseError::*; let e; - let page = self - .usage_page - .get_mut(self.stack_index) - .ok_or(StackOverflow)?; - // TODO update usage page - (e, self.data) = Item::parse(self.data, *page)?; + (e, self.data) = Item::parse(self.data, self.usage_page)?; match &e { - Item::Collection(_) => { - self.stack_index += 1; - *self.usage_page.get_mut(self.stack_index).ok_or(StackOverflow)? = *page; - } - Item::EndCollection => { - self.stack_index -= 1; - } - Item::UsagePage(p) => *page = p.as_raw(), + Item::UsagePage(p) => self.usage_page = p.as_raw(), _ => {} } Ok(e) @@ -290,8 +275,7 @@ impl<'a> Iterator for Parser<'a> { pub fn parse(data: &[u8]) -> Parser<'_> { Parser { data, - usage_page: [0xffff; 16], - stack_index: 0, + usage_page: 0, } }