fifobuffer.go 594 B

1234567891011121314151617181920212223242526272829303132
  1. package door
  2. import "log"
  3. type FIFOBuffer struct {
  4. data []rune
  5. index int
  6. }
  7. func NewFIFOBuffer(maxsize int) FIFOBuffer {
  8. return FIFOBuffer{data: make([]rune, maxsize)}
  9. }
  10. func (f *FIFOBuffer) Empty() bool {
  11. return f.index == 0
  12. }
  13. func (f *FIFOBuffer) Push(value rune) {
  14. if f.index >= len(f.data) {
  15. log.Panicf("Exceeded FIFOBuffer index %d size %d %#v", f.index, len(f.data), f.data)
  16. }
  17. f.data[f.index] = value
  18. f.index++
  19. }
  20. func (f *FIFOBuffer) Pop() rune {
  21. if f.index == 0 {
  22. log.Panicf("Pop from empty FIFOBuffer (size %d).", len(f.data))
  23. }
  24. f.index--
  25. return f.data[f.index]
  26. }