]> 127.0.0.1 Git - part/.git/commitdiff
1 v0.28.20240330140748
authorqydysky <qydysky@foxmail.com>
Sat, 30 Mar 2024 14:02:37 +0000 (22:02 +0800)
committerqydysky <qydysky@foxmail.com>
Sat, 30 Mar 2024 14:02:37 +0000 (22:02 +0800)
slice/Slice.go
slice/Slice_test.go

index b47687005349d0ef5b781441077f7e1bb16c7984..5d7cceb953b2116815ca289778cf67ba7ac98b1b 100644 (file)
@@ -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 {
index 4521ffed868fc51ab582312700b4b25c4d75bc97..fc86d8d2dfd2147686c45202ae5ea25d6f6732d8 100644 (file)
@@ -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"))