]> 127.0.0.1 Git - part/.git/commitdiff
1 (#56) v0.28.20250518084643
authorqydysky <qydysky@foxmail.com>
Sun, 18 May 2025 08:46:33 +0000 (16:46 +0800)
committerGitHub <noreply@github.com>
Sun, 18 May 2025 08:46:33 +0000 (16:46 +0800)
slice/Slice.go

index 8d2bc3b6d9b372e191337427c0f720f684634630..53f48e9fea8d8c827b67d67353b5fe434c50af09 100644 (file)
@@ -87,18 +87,13 @@ func (t *Buf[T]) Append(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 {
+       if t.buf == nil {
                t.buf = make([]T, len(data))
-       } else {
-               diff := cap(t.buf) - t.bufsize - len(data)
-               if diff < 0 {
-                       t.buf = append(t.buf[:cap(t.buf)], make([]T, -diff)...)
-               }
-               t.buf = t.buf[:t.bufsize+len(data)]
+       } else if t.maxsize != 0 && t.bufsize+len(data) > t.maxsize {
+               return ErrOverMax
        }
-       t.bufsize += copy(t.buf[t.bufsize:], data)
+       t.buf = append(t.buf[:t.bufsize], data...)
+       t.bufsize += len(data)
        t.modified.t += 1
        return nil
 }
@@ -107,17 +102,13 @@ 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 {
+       if t.buf == nil {
                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)...)
-               }
+       } else if t.maxsize != 0 && t.bufsize+len(data) > t.maxsize {
+               return ErrOverMax
        }
-       t.bufsize = copy(t.buf, data)
+       t.buf = append(t.buf[:0], data...)
+       t.bufsize = len(data)
        t.modified.t += 1
        return nil
 }