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  }