Files
yt-dlp-webui/server/internal/stack.go
2023-07-26 16:21:10 +02:00

44 lines
660 B
Go

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