package fsbucket import "sync" type ( queue struct { *sync.RWMutex buf []elem } elem struct { depth int prefix string path string } ) func newQueue(n int) *queue { return &queue{ RWMutex: new(sync.RWMutex), buf: make([]elem, 0, n), } } func (q *queue) Len() int { return len(q.buf) } func (q *queue) Push(s elem) { q.Lock() q.buf = append(q.buf, s) q.Unlock() } func (q *queue) Pop() (s elem) { q.Lock() if len(q.buf) > 0 { s = q.buf[0] q.buf = q.buf[1:] } q.Unlock() return }