in ubjson/parse.go [461:494]
func (p *Parser) stepArrayTyped(b []byte) ([]byte, bool, error) {
step := p.state.current.stateStep
// parse typed array header
switch step {
case stStart, stWithType0, stWithType1:
b, err := p.stepTypeLenHeader(b, stWithLen)
return b, false, err
}
l := int(p.length.current)
if step == stWithLen {
p.state.current.stateStep = stCont
err := p.visitor.OnArrayStart(l, p.valueType)
if err != nil {
return b, false, err
}
}
if l == 0 {
err := p.visitor.OnArrayFinished()
done := true
if err == nil {
done, err = p.popLenState()
}
return b, done, err
}
p.length.current--
vs := p.valueState.current
p.pushState(vs)
b, _, err := p.execStep(b)
return b, false, err
}