package part
import (
- "errors"
"sync"
"unsafe"
+
+ perrors "github.com/qydysky/part/errors"
)
type Buf[T any] struct {
return to.Append(buf)
}
+var ErrOverMax = perrors.New("slices.Append", "ErrOverMax")
+
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 errors.New("超出设定maxsize")
+ return ErrOverMax
} else if len(t.buf) == 0 {
t.buf = make([]T, len(data))
} else {
return nil
}
+var ErrOverLen = perrors.New("slices.Remove", "ErrOverLen")
+
func (t *Buf[T]) RemoveFront(n int) error {
if n <= 0 {
return nil
defer t.l.Unlock()
if t.bufsize < n {
- return errors.New("尝试移除的数值大于长度")
+ return ErrOverLen
} else if t.bufsize == n {
t.bufsize = 0
} else {
defer t.l.Unlock()
if t.bufsize < n {
- return errors.New("尝试移除的数值大于长度")
+ return ErrOverLen
} else if t.bufsize == n {
t.bufsize = 0
} else {
return t.modified
}
+var ErrNoSameBuf = perrors.New("slices.HadModified", "ErrNoSameBuf")
+
func (t *Buf[T]) HadModified(mt Modified) (modified bool, err error) {
t.l.RLock()
defer t.l.RUnlock()
if t.modified.p != mt.p {
- err = errors.New("不能对比不同buf")
+ err = ErrNoSameBuf
}
modified = t.modified.t != mt.t
return
if !b.IsEmpty() || b.Size() != 0 || !bytes.Equal(bc, []byte("abc")) || !bytes.Equal(b.GetPureBuf(), []byte("")) {
t.Fatal()
}
- if e := b.RemoveFront(1); e == nil || e.Error() != "尝试移除的数值大于长度" {
+ if e := b.RemoveFront(1); e == nil || e != ErrOverLen {
t.Fatal()
}
- if e := b.Append([]byte("abcdef")); e == nil || e.Error() != "超出设定maxsize" {
+ if e := b.Append([]byte("abcdef")); e == nil || e != ErrOverMax {
t.Fatal()
}
b.Clear()