]> 127.0.0.1 Git - part/.git/commitdiff
Add v0.23.9
authorqydysky <32743305+qydysky@users.noreply.github.com>
Sat, 4 Mar 2023 11:10:08 +0000 (19:10 +0800)
committerqydysky <32743305+qydysky@users.noreply.github.com>
Sat, 4 Mar 2023 11:10:08 +0000 (19:10 +0800)
slice/Slice.go
slice/Slice_test.go

index 2a07109216124a03e29d5ddac1df72fbffea08b1..57feeff4e43acdbb3ba8157a9fc8b5ca50ccdcf8 100644 (file)
@@ -159,3 +159,18 @@ func (t *Buf[T]) GetCopyBuf() (buf []T) {
        copy(buf, t.buf[:t.bufsize])
        return
 }
+
+// Need to lock when processing buf or Make sure buf only processing by GetBufCopy
+func (t *Buf[T]) GetBufCopy(buf *[]T) {
+       t.RLock()
+       defer t.RUnlock()
+
+       if len(*buf) == 0 {
+               *buf = make([]T, t.bufsize)
+       } else if len(*buf) < t.bufsize {
+               *buf = append(*buf, make([]T, t.bufsize-len(*buf))...)
+       } else {
+               *buf = (*buf)[:t.bufsize]
+       }
+       copy(*buf, t.buf[:t.bufsize])
+}
index a093095d23f703089c00917b34c46626c499016c..be386e4e90b047aac9674e7d38dcf1b222b00505 100644 (file)
@@ -79,3 +79,29 @@ func TestXxx2(t *testing.T) {
                t.Fatal()
        }
 }
+
+func TestXxx3(t *testing.T) {
+       var c = New[byte]()
+       var b = []byte{}
+       c.Append([]byte("12345"))
+       c.Append([]byte("67890"))
+       c.GetBufCopy(&b)
+       c.Reset()
+       if !bytes.Equal(b, []byte("1234567890")) {
+               t.Fatal(string(b))
+       }
+       c.Append([]byte("abc"))
+       c.Append([]byte("defg"))
+       c.GetBufCopy(&b)
+       c.Reset()
+       if !bytes.Equal(b, []byte("abcdefg")) {
+               t.Fatal()
+       }
+       c.Append([]byte("akjsdhfaksdjhf"))
+       c.Append([]byte("9834719203857"))
+       c.GetBufCopy(&b)
+       c.Reset()
+       if !bytes.Equal(b, []byte("akjsdhfaksdjhf9834719203857")) {
+               t.Fatal()
+       }
+}