package door

import "log"

type FIFOBuffer struct {
	data  []int
	index int
}

func NewFIFOBuffer(maxsize int) FIFOBuffer {
	return FIFOBuffer{data: make([]int, maxsize)}
}

func (f *FIFOBuffer) Empty() bool {
	return f.index == 0
}

func (f *FIFOBuffer) Push(value int) {
	if f.index >= len(f.data) {
		log.Panicf("Exceeded FIFOBuffer index %d size %d %#v", f.index, len(f.data), f.data)
	}
	f.data[f.index] = value
	f.index++
}

func (f *FIFOBuffer) Pop() int {
	if f.index == 0 {
		log.Panicf("Pop from empty FIFOBuffer (size %d).", len(f.data))
	}
	f.index--
	return f.data[f.index]
}