type Buf[T any] struct {
maxsize int
newF func() *T
- validF func(*T) bool
+ inUse func(*T) bool
reuseF func(*T) *T
poolF func(*T) *T
buf []*T
//
// NewF: func() *T 新值
//
-// ValidF func(*T) (inUse bool) 是否可重用(是否还在使用)
+// InUse func(*T) bool 是否在使用
//
// ReuseF func(*T) *T 重用前处理
//
// PoolF func(*T) *T 入池前处理
//
// maxsize int 池最大数量
-func New[T any](NewF func() *T, ValidF func(*T) (inUse bool), ReuseF func(*T) *T, PoolF func(*T) *T, maxsize int) *Buf[T] {
+func New[T any](NewF func() *T, InUse func(*T) bool, ReuseF func(*T) *T, PoolF func(*T) *T, maxsize int) *Buf[T] {
t := new(Buf[T])
t.newF = NewF
- t.validF = ValidF
+ t.inUse = InUse
t.reuseF = ReuseF
t.poolF = PoolF
t.maxsize = maxsize
defer t.Unlock()
for i := 0; i < len(t.buf); i++ {
- if !t.validF(t.buf[i]) {
+ if !t.inUse(t.buf[i]) {
t.buf[i] = nil
t.buf = append(t.buf[:i], t.buf[i+1:]...)
i--
defer t.Unlock()
for i := 0; i < len(t.buf); i++ {
- if !t.validF(t.buf[i]) {
+ if !t.inUse(t.buf[i]) {
return t.reuseF(t.buf[i])
}
}
var cu = 0
for i := 0; i < len(t.buf); i++ {
- if !t.validF(t.buf[i]) {
+ if !t.inUse(t.buf[i]) {
t.buf[i] = t.poolF(item[cu])
cu++
if cu >= len(item) {