]> 127.0.0.1 Git - part/.git/commitdiff
fix v0.21.4
authorqydysky <32743305+qydysky@users.noreply.github.com>
Wed, 18 Jan 2023 15:07:33 +0000 (23:07 +0800)
committerqydysky <32743305+qydysky@users.noreply.github.com>
Wed, 18 Jan 2023 15:07:33 +0000 (23:07 +0800)
pool/Pool.go
pool/Pool_test.go
slice/Slice.go

index edb4c475a13bf97ec6acfd183d42ba3149cc0f2e..6a47c6c5f8a4d1c5856bab152556bbc11242d2c7 100644 (file)
@@ -9,15 +9,28 @@ type Buf[T any] struct {
        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
 }
@@ -59,7 +72,7 @@ func (t *Buf[T]) Put(item ...*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
@@ -68,6 +81,6 @@ func (t *Buf[T]) Put(item ...*T) {
        }
 
        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]))
        }
 }
index 96ed4f25977c8d115245bca21a8f92a55e038b53..da6965a5c776f79f0500b3a05ccc394d10d92383 100644 (file)
@@ -25,7 +25,11 @@ func TestXxx(t *testing.T) {
                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")...)
index 567b463da5684ccd167df5b27f87c843c988b949..0120c3eeefa4d00d230c5c7377c7ba482fd68c3b 100644 (file)
@@ -138,14 +138,14 @@ func (t *Buf[T]) GetModified() Modified {
        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
 }