47 lines
753 B
Go
47 lines
753 B
Go
package views
|
|
|
|
const maxStackSize = 10
|
|
|
|
type cmdStack struct {
|
|
index int
|
|
stack []string
|
|
}
|
|
|
|
func newCmdStack() *cmdStack {
|
|
return &cmdStack{stack: make([]string, 0, maxStackSize)}
|
|
}
|
|
|
|
func (s *cmdStack) push(cmd string) {
|
|
if len(s.stack) == maxStackSize {
|
|
s.stack = s.stack[1 : len(s.stack)-1]
|
|
}
|
|
s.stack = append(s.stack, cmd)
|
|
}
|
|
|
|
func (s *cmdStack) pop() (string, bool) {
|
|
if s.empty() {
|
|
return "", false
|
|
}
|
|
|
|
top := s.stack[len(s.stack)-1]
|
|
s.stack = s.stack[:len(s.stack)-1]
|
|
|
|
return top, true
|
|
}
|
|
|
|
func (s *cmdStack) top() (string, bool) {
|
|
if s.empty() {
|
|
return "", false
|
|
}
|
|
|
|
return s.stack[len(s.stack)-1], true
|
|
}
|
|
|
|
func (s *cmdStack) empty() bool {
|
|
return len(s.stack) == 0
|
|
}
|
|
|
|
func (s *cmdStack) last() bool {
|
|
return len(s.stack) == 1
|
|
}
|