package main import ( "container/list" "github.com/filecoin-project/lotus/chain/store" ) type headBuffer struct { buffer *list.List size int } func NewHeadBuffer(size int) *headBuffer { buffer := list.New() buffer.Init() return &headBuffer{ buffer: buffer, size: size, } } func (h *headBuffer) Push(hc *store.HeadChange) (rethc *store.HeadChange) { if h.buffer.Len() == h.size { var ok bool el := h.buffer.Front() rethc, ok = el.Value.(*store.HeadChange) if !ok { panic("Value from list is not the correct type") } h.buffer.Remove(el) } h.buffer.PushBack(hc) return } func (h *headBuffer) Pop() { el := h.buffer.Back() if el != nil { h.buffer.Remove(el) } }