45 lines
525 B
Go
45 lines
525 B
Go
|
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
|
||
|
}
|