forked from mirror/ants
42 lines
802 B
Go
42 lines
802 B
Go
package ants
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
// errQueueIsFull will be returned when the worker queue is full.
|
|
errQueueIsFull = errors.New("the queue is full")
|
|
|
|
// errQueueIsReleased will be returned when trying to insert item to a released worker queue.
|
|
errQueueIsReleased = errors.New("the queue length is zero")
|
|
)
|
|
|
|
type workerArray interface {
|
|
len() int
|
|
isEmpty() bool
|
|
insert(worker *goWorker) error
|
|
detach() *goWorker
|
|
retrieveExpiry(duration time.Duration) []*goWorker
|
|
reset()
|
|
}
|
|
|
|
type arrayType int
|
|
|
|
const (
|
|
stackType arrayType = 1 << iota
|
|
loopQueueType
|
|
)
|
|
|
|
func newWorkerArray(aType arrayType, size int) workerArray {
|
|
switch aType {
|
|
case stackType:
|
|
return newWorkerStack(size)
|
|
case loopQueueType:
|
|
return newWorkerLoopQueue(size)
|
|
default:
|
|
return newWorkerStack(size)
|
|
}
|
|
}
|