@@ -169,11 +169,11 @@ ebml_master_elements! {
169169struct ElementReaderContext {
170170 /// Previous master element
171171 previous_master : Option < MasterElement > ,
172- previous_master_length : u64 ,
172+ previous_master_length : VInt ,
173173 /// Current master element
174174 current_master : Option < MasterElement > ,
175175 /// Remaining length of the master element
176- master_length : u64 ,
176+ master_length : VInt ,
177177 /// Maximum size in octets of all element IDs
178178 max_id_length : u8 ,
179179 /// Maximum size in octets of all element data sizes
@@ -189,9 +189,9 @@ impl Default for ElementReaderContext {
189189 fn default ( ) -> Self {
190190 Self {
191191 previous_master : None ,
192- previous_master_length : 0 ,
192+ previous_master_length : VInt :: ZERO ,
193193 current_master : None ,
194- master_length : 0 ,
194+ master_length : VInt :: ZERO ,
195195 // https://www.rfc-editor.org/rfc/rfc8794.html#name-ebmlmaxidlength-element
196196 max_id_length : 4 ,
197197 // https://www.rfc-editor.org/rfc/rfc8794.html#name-ebmlmaxsizelength-element
@@ -202,12 +202,32 @@ impl Default for ElementReaderContext {
202202}
203203
204204pub ( crate ) enum ElementReaderYield {
205- Master ( ( ElementIdent , u64 ) ) ,
206- Child ( ( ChildElementDescriptor , u64 ) ) ,
205+ Master ( ( ElementIdent , VInt ) ) ,
206+ Child ( ( ChildElementDescriptor , VInt ) ) ,
207207 Unknown ( ElementHeader ) ,
208208 Eof ,
209209}
210210
211+ impl ElementReaderYield {
212+ pub fn ident ( & self ) -> Option < u64 > {
213+ match self {
214+ ElementReaderYield :: Master ( ( ident, _) ) => Some ( * ident as u64 ) ,
215+ ElementReaderYield :: Child ( ( child, _) ) => Some ( child. ident as u64 ) ,
216+ ElementReaderYield :: Unknown ( header) => Some ( header. id . value ( ) ) ,
217+ _ => None ,
218+ }
219+ }
220+
221+ pub fn size ( & self ) -> Option < u64 > {
222+ match self {
223+ ElementReaderYield :: Master ( ( _, size) ) => Some ( size. value ( ) ) ,
224+ ElementReaderYield :: Child ( ( _, size) ) => Some ( size. value ( ) ) ,
225+ ElementReaderYield :: Unknown ( header) => Some ( header. size . value ( ) ) ,
226+ _ => None ,
227+ }
228+ }
229+ }
230+
211231pub struct ElementReader < R > {
212232 reader : R ,
213233 ctx : ElementReaderContext ,
@@ -250,7 +270,7 @@ where
250270
251271 fn goto_next_master ( & mut self ) -> Result < ElementReaderYield > {
252272 if self . ctx . master_length != 0 {
253- self . skip ( self . ctx . master_length ) ?;
273+ self . skip ( self . ctx . master_length . value ( ) ) ?;
254274 }
255275
256276 let header = ElementHeader :: read (
@@ -265,7 +285,7 @@ where
265285
266286 self . store_previous_master ( ) ;
267287 self . ctx . current_master = Some ( * master) ;
268- self . ctx . master_length = header. size . value ( ) ;
288+ self . ctx . master_length = header. size ;
269289 Ok ( ElementReaderYield :: Master ( (
270290 master. id ,
271291 self . ctx . master_length ,
@@ -312,16 +332,13 @@ where
312332 . get ( & header. id )
313333 . expect ( "Nested master elements should be defined at this level." ) ,
314334 ) ;
315- self . ctx . master_length = header. size . value ( ) ;
335+ self . ctx . master_length = header. size ;
316336
317337 // We encountered a nested master element
318- return Ok ( ElementReaderYield :: Master ( (
319- child. ident ,
320- header. size . value ( ) ,
321- ) ) ) ;
338+ return Ok ( ElementReaderYield :: Master ( ( child. ident , header. size ) ) ) ;
322339 }
323340
324- Ok ( ElementReaderYield :: Child ( ( * child, header. size . value ( ) ) ) )
341+ Ok ( ElementReaderYield :: Child ( ( * child, header. size ) ) )
325342 }
326343
327344 fn lock ( & mut self ) {
0 commit comments