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])
+}
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()
+ }
+}