forked from mirror/ants
42 lines
695 B
Go
42 lines
695 B
Go
package ants
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
// ErrQueueIsFull ...
|
|
ErrQueueIsFull = errors.New("the queue is full")
|
|
|
|
// ErrQueueLengthIsZero ...
|
|
ErrQueueLengthIsZero = errors.New("the queue length is zero")
|
|
)
|
|
|
|
type workerArray interface {
|
|
len() int
|
|
isEmpty() bool
|
|
insert(worker *goWorker) error
|
|
detach() *goWorker
|
|
findOutExpiry(duration time.Duration) []*goWorker
|
|
release()
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|