From f3d6bd73044a996213b9219b9606cfd6a2dcf2e8 Mon Sep 17 00:00:00 2001 From: qydysky <32743305+qydysky@users.noreply.github.com> Date: Wed, 18 Jan 2023 23:07:33 +0800 Subject: [PATCH] fix --- pool/Pool.go | 19 ++++++++++++++++--- pool/Pool_test.go | 6 +++++- slice/Slice.go | 4 ++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/pool/Pool.go b/pool/Pool.go index edb4c47..6a47c6c 100644 --- a/pool/Pool.go +++ b/pool/Pool.go @@ -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])) } } diff --git a/pool/Pool_test.go b/pool/Pool_test.go index 96ed4f2..da6965a 100644 --- a/pool/Pool_test.go +++ b/pool/Pool_test.go @@ -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")...) diff --git a/slice/Slice.go b/slice/Slice.go index 567b463..0120c3e 100644 --- a/slice/Slice.go +++ b/slice/Slice.go @@ -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 } -- 2.39.2