github.com/urso/go-structform@v0.0.2/cborl/stack.go (about) 1 package cborl 2 3 type stateStack struct { 4 stack []state // state stack for nested arrays/objects 5 stack0 [64]state 6 current state 7 } 8 9 type lengthStack struct { 10 stack []int64 11 stack0 [32]int64 12 current int64 13 } 14 15 func (s *stateStack) init(s0 state) { 16 s.current = s0 17 s.stack = s.stack0[:0] 18 } 19 20 func (s *stateStack) push(next state) { 21 if s.current.major != stFail { 22 s.stack = append(s.stack, s.current) 23 } 24 s.current = next 25 } 26 27 func (s *stateStack) pop() { 28 if len(s.stack) == 0 { 29 s.current = state{stFail, stStart} 30 } else { 31 last := len(s.stack) - 1 32 s.current = s.stack[last] 33 s.stack = s.stack[:last] 34 } 35 } 36 37 func (s *lengthStack) init() { 38 s.stack = s.stack0[:0] 39 } 40 41 func (s *lengthStack) push(l int64) { 42 s.stack = append(s.stack, s.current) 43 s.current = l 44 } 45 46 func (s *lengthStack) pop() int64 { 47 if len(s.stack) == 0 { 48 s.current = -1 49 return -1 50 } else { 51 last := len(s.stack) - 1 52 old := s.current 53 s.current = s.stack[last] 54 s.stack = s.stack[:last] 55 return old 56 } 57 }