// Copyright 2020 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
package a | |
type Stack[E any] []E | |
func (s *Stack[E]) Push(e E) { | |
*s = append(*s, e) | |
} | |
func (s *Stack[E]) Pop() (E, bool) { | |
l := len(*s) | |
if l == 0 { | |
var zero E | |
return zero, false | |
} | |
r := (*s)[l - 1] | |
*s = (*s)[:l - 1] | |
return r, true | |
} | |
func (s *Stack[E]) IsEmpty() bool { | |
return len(*s) == 0 | |
} | |
func (s *Stack[E]) Len() int { | |
return len(*s) | |
} |