Files
yt-dlp-webui/server/internal/stack.go
2024-02-12 12:02:23 +01:00

40 lines
624 B
Go

package internal
type Stack[T any] struct {
Elements []*T
count int
}
func NewStack[T any]() *Stack[T] {
return &Stack[T]{
Elements: make([]*T, 10),
}
}
func (s *Stack[T]) Push(val T) {
if s.count >= len(s.Elements) {
Elements := make([]*T, len(s.Elements)*2)
copy(Elements, s.Elements)
s.Elements = Elements
}
s.Elements[s.count] = &val
s.count++
}
func (s *Stack[T]) Pop() *T {
if s.count == 0 {
return nil
}
Element := s.Elements[s.count-1]
s.count--
return Element
}
func (s *Stack[T]) IsEmpty() bool {
return s.count == 0
}
func (s *Stack[T]) IsNotEmpty() bool {
return s.count != 0
}