Files
gonic/scanner/stack/stack.go
2019-07-06 19:28:03 +01:00

62 lines
821 B
Go

package stack
import (
"fmt"
"strings"
"senan.xyz/g/gonic/model"
)
type item struct {
value *model.Album
next *item
}
type Stack struct {
top *item
len uint
}
func (s *Stack) Push(v *model.Album) {
s.top = &item{
value: v,
next: s.top,
}
s.len++
}
func (s *Stack) Pop() *model.Album {
if s.len == 0 {
return nil
}
v := s.top.value
s.top = s.top.next
s.len--
return v
}
func (s *Stack) Peek() *model.Album {
if s.len == 0 {
return nil
}
return s.top.value
}
func (s *Stack) PeekID() int {
if s.len == 0 {
return 0
}
return s.top.value.ID
}
func (s *Stack) String() string {
var str strings.Builder
str.WriteString("[")
for i, f := uint(0), s.top; i < s.len; i++ {
str.WriteString(fmt.Sprintf("%d, ", f.value.ID))
f = f.next
}
str.WriteString("]")
return str.String()
}