github.com/mavryk-network/mvgo@v1.19.9/micheline/stack.go (about) 1 // Copyright (c) 2020-2021 Blockwatch Data Inc. 2 // Author: alex@blockwatch.cc 3 4 package micheline 5 6 type Stack []Prim 7 8 func NewStack(args ...Prim) *Stack { 9 s := Stack(args) 10 return &s 11 } 12 13 func (s *Stack) Pop() Prim { 14 if l := s.Len(); l > 0 { 15 p := (*s)[l-1] 16 *s = (*s)[:l-1] 17 return p 18 } 19 return InvalidPrim 20 } 21 22 func (s *Stack) Push(args ...Prim) { 23 for i := len(args) - 1; i >= 0; i-- { 24 *s = append(*s, args[i]) 25 } 26 } 27 28 func (s *Stack) Len() int { 29 return len(*s) 30 } 31 32 func (s *Stack) Empty() bool { 33 return len(*s) == 0 34 } 35 36 func (s *Stack) Peek() Prim { 37 if l := s.Len(); l > 0 { 38 return (*s)[l-1] 39 } 40 return InvalidPrim 41 }