func()

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
}