@@ -56,22 +56,25 @@ func (d *decoder) decode(offset uint, result reflect.Value, depth int) (uint, er
5656 return d .decodeFromType (typeNum , size , newOffset , result , depth + 1 )
5757}
5858
59- func (d * decoder ) decodeToDeserializer (offset uint , dser deserializer , depth int ) (uint , error ) {
59+ func (d * decoder ) decodeToDeserializer (offset uint , dser deserializer , depth int , getNext bool ) (uint , error ) {
6060 if depth > maximumDataStructureDepth {
6161 return 0 , newInvalidDatabaseError ("exceeded maximum data structure depth; database is likely corrupt" )
6262 }
63- typeNum , size , newOffset , err := d . decodeCtrlData ( offset )
63+ skip , err := dser . ShouldSkip ( uintptr ( offset ) )
6464 if err != nil {
6565 return 0 , err
6666 }
67+ if skip {
68+ if getNext {
69+ return d .nextValueOffset (offset , 1 )
70+ }
71+ return 0 , nil
72+ }
6773
68- skip , err := dser . ShouldSkip ( uintptr ( offset ) )
74+ typeNum , size , newOffset , err := d . decodeCtrlData ( offset )
6975 if err != nil {
7076 return 0 , err
7177 }
72- if skip {
73- return d .nextValueOffset (offset , 1 )
74- }
7578
7679 return d .decodeFromTypeToDeserializer (typeNum , size , newOffset , dser , depth + 1 )
7780}
@@ -196,7 +199,7 @@ func (d *decoder) decodeFromTypeToDeserializer(
196199 if err != nil {
197200 return 0 , err
198201 }
199- _ , err = d .decodeToDeserializer (pointer , dser , depth )
202+ _ , err = d .decodeToDeserializer (pointer , dser , depth , false )
200203 return newOffset , err
201204 case _Slice :
202205 return d .decodeSliceToDeserializer (size , offset , dser , depth )
@@ -581,12 +584,12 @@ func (d *decoder) decodeMapToDeserializer(
581584 }
582585 for i := uint (0 ); i < size ; i ++ {
583586 // TODO - implement key/value skipping?
584- offset , err = d .decodeToDeserializer (offset , dser , depth )
587+ offset , err = d .decodeToDeserializer (offset , dser , depth , true )
585588 if err != nil {
586589 return 0 , err
587590 }
588591
589- offset , err = d .decodeToDeserializer (offset , dser , depth )
592+ offset , err = d .decodeToDeserializer (offset , dser , depth , true )
590593 if err != nil {
591594 return 0 , err
592595 }
@@ -661,7 +664,7 @@ func (d *decoder) decodeSliceToDeserializer(
661664 return 0 , err
662665 }
663666 for i := uint (0 ); i < size ; i ++ {
664- offset , err = d .decodeToDeserializer (offset , dser , depth )
667+ offset , err = d .decodeToDeserializer (offset , dser , depth , true )
665668 if err != nil {
666669 return 0 , err
667670 }
0 commit comments