From: qydysky Date: Sat, 30 Mar 2024 14:02:37 +0000 (+0800) Subject: 1 X-Git-Tag: v0.28.20240330140748 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=60f5ae1339c393c9df27e1772b6e6c63c1176639;p=part%2F.git 1 --- diff --git a/slice/Slice.go b/slice/Slice.go index b476870..5d7cceb 100644 --- a/slice/Slice.go +++ b/slice/Slice.go @@ -86,6 +86,25 @@ func (t *Buf[T]) Append(data []T) error { return nil } +func (t *Buf[T]) SetFrom(data []T) error { + t.l.Lock() + defer t.l.Unlock() + + if t.maxsize != 0 && len(t.buf)+len(data) > t.maxsize { + return ErrOverMax + } else if len(t.buf) == 0 { + t.buf = make([]T, len(data)) + } else { + diff := len(t.buf) - t.bufsize - len(data) + if diff < 0 { + t.buf = append(t.buf, make([]T, -diff)...) + } + } + t.bufsize = copy(t.buf, data) + t.modified.t += 1 + return nil +} + var ErrOverLen = perrors.New("slices.Remove", "ErrOverLen") func (t *Buf[T]) RemoveFront(n int) error { diff --git a/slice/Slice_test.go b/slice/Slice_test.go index 4521ffe..fc86d8d 100644 --- a/slice/Slice_test.go +++ b/slice/Slice_test.go @@ -56,6 +56,47 @@ func TestXxx(t *testing.T) { } } +func TestXxx3(t *testing.T) { + var ( + c = New[byte]() + m = New[byte]() + s = New[byte]() + b1 = []byte("01234") + ) + s.Append(b1) + + buf, ul := s.GetPureBufRLock() + m.Append(buf) + if e := m.AppendTo(c); e != nil { + t.Fatal(e) + } + m.Reset() + ul() + + buf1, ul1 := c.GetPureBufRLock() + if !bytes.Equal(buf1, []byte("01234")) { + t.Fatal() + } + ul1() +} + +func TestXxx4(t *testing.T) { + var ( + c = New[byte]() + b1 = []byte("01234333") + b2 = []byte("01234") + ) + c.Append(b1) + b1[0] = 'a' + c.SetFrom(b2) + + buf, ul := c.GetPureBufRLock() + if !bytes.Equal(buf, []byte("01234")) { + t.Fatal() + } + ul() +} + func TestXxx2(t *testing.T) { var c = New[byte]() c.Append([]byte("12345"))