diff options
Diffstat (limited to 'vendor/github.com/sergi/go-diff/diffmatchpatch/stack.go')
-rw-r--r-- | vendor/github.com/sergi/go-diff/diffmatchpatch/stack.go | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/vendor/github.com/sergi/go-diff/diffmatchpatch/stack.go b/vendor/github.com/sergi/go-diff/diffmatchpatch/stack.go new file mode 100644 index 00000000..d28ae459 --- /dev/null +++ b/vendor/github.com/sergi/go-diff/diffmatchpatch/stack.go @@ -0,0 +1,66 @@ +package diffmatchpatch + +import ( + "fmt" +) + +type Stack struct { + top *Element + size int +} + +type Element struct { + value interface{} + next *Element +} + +// Len returns the stack's length +func (s *Stack) Len() int { + return s.size +} + +// Push appends a new element onto the stack +func (s *Stack) Push(value interface{}) { + s.top = &Element{value, s.top} + s.size++ +} + +// Pop removes the top element from the stack and return its value +// If the stack is empty, return nil +func (s *Stack) Pop() (value interface{}) { + if s.size > 0 { + value, s.top = s.top.value, s.top.next + s.size-- + return + } + return nil +} + +// Peek returns the value of the element on the top of the stack +// but don't remove it. If the stack is empty, return nil +func (s *Stack) Peek() (value interface{}) { + if s.size > 0 { + value = s.top.value + return + } + return -1 +} + +// Clear empties the stack +func (s *Stack) Clear() { + s.top = nil + s.size = 0 +} + +func main() { + stack := new(Stack) + + stack.Push("Things") + stack.Push("and") + stack.Push("Stuff") + + for stack.Len() > 0 { + fmt.Printf("%s ", stack.Pop().(string)) + } + fmt.Println() +} |