pkg/skoop/utils/stack.go (32 lines of code) (raw):

package utils type Stack[V any] struct { arr []V len int } func NewStack[V any](v ...V) *Stack[V] { s := &Stack[V]{ arr: []V{}, len: 0, } for _, e := range v { s.Push(e) } return s } func (s *Stack[V]) Pop() V { if s.len == 0 { panic("stack is empty") } s.len = s.len - 1 elem := s.arr[s.len] s.arr = s.arr[:s.len] return elem } func (s *Stack[V]) Push(v V) { s.arr = append(s.arr, v) s.len = s.len + 1 } func (s *Stack[V]) Empty() bool { return s.len == 0 } var _ Stack[int]