newF func() *T
validF func(*T) bool
reuseF func(*T) *T
+ poolF func(*T) *T
buf []*T
sync.RWMutex
}
-func New[T any](NewF func() *T, ValidF func(*T) bool, ReuseF func(*T) *T, maxsize int) *Buf[T] {
+// 创建池
+//
+// NewF: func() *T 新值
+//
+// ValidF func(*T) bool 是否可重用(是否还在使用)
+//
+// ReuseF func(*T) *T 重用前处理
+//
+// PoolF func(*T) *T 入池前处理
+//
+// maxsize int 池最大数量
+func New[T any](NewF func() *T, ValidF 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.reuseF = ReuseF
+ t.poolF = PoolF
t.maxsize = maxsize
return t
}
var cu = 0
for i := 0; i < len(t.buf); i++ {
if !t.validF(t.buf[i]) {
- t.buf[i] = item[cu]
+ t.buf[i] = t.poolF(item[cu])
cu++
if cu >= len(item) {
return
}
for i := cu; i < len(item) && t.maxsize > len(t.buf); i++ {
- t.buf = append(t.buf, item[i])
+ t.buf = append(t.buf, t.poolF(item[i]))
}
}
return t
}
- var b = New(newf, validf, reusef, 10)
+ var poolf = func(t *a) *a {
+ return t
+ }
+
+ var b = New(newf, validf, reusef, poolf, 10)
var c1 = b.Get()
c1.d = append(c1.d, []byte("1")...)
return t.modified
}
-func (t *Buf[T]) HadModified(mt Modified) (same bool, err error) {
+func (t *Buf[T]) HadModified(mt Modified) (modified bool, err error) {
t.RLock()
defer t.RUnlock()
if t.modified.p != mt.p {
err = errors.New("不能对比不同buf")
}
- same = t.modified.t != mt.t
+ modified = t.modified.t != mt.t
return
}