diff options
Diffstat (limited to 'vendor/github.com/bytedance/sonic/internal/rt/fastmem.go')
-rw-r--r-- | vendor/github.com/bytedance/sonic/internal/rt/fastmem.go | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/vendor/github.com/bytedance/sonic/internal/rt/fastmem.go b/vendor/github.com/bytedance/sonic/internal/rt/fastmem.go index a68d98aff..508be4765 100644 --- a/vendor/github.com/bytedance/sonic/internal/rt/fastmem.go +++ b/vendor/github.com/bytedance/sonic/internal/rt/fastmem.go @@ -17,8 +17,10 @@ package rt import ( - `unsafe` - `reflect` + "reflect" + "unsafe" + + "github.com/bytedance/sonic/option" ) //go:nosplit @@ -90,6 +92,21 @@ func GuardSlice(buf *[]byte, n int) { } } +func GuardSlice2(buf []byte, n int) []byte { + c := cap(buf) + l := len(buf) + if c-l < n { + c = c>>1 + n + l + if c < 32 { + c = 32 + } + tmp := make([]byte, l, c) + copy(tmp, buf) + buf = tmp + } + return buf +} + //go:nosplit func Ptr2SlicePtr(s unsafe.Pointer, l int, c int) unsafe.Pointer { slice := &GoSlice{ @@ -122,4 +139,17 @@ func StrFrom(p unsafe.Pointer, n int64) (s string) { func NoEscape(p unsafe.Pointer) unsafe.Pointer { x := uintptr(p) return unsafe.Pointer(x ^ 0) -}
\ No newline at end of file +} + +//go:nosplit +func MoreStack(size uintptr) + +//go:nosplit +func Add(ptr unsafe.Pointer, off uintptr) unsafe.Pointer { + return unsafe.Pointer(uintptr(ptr) + off) +} + +// CanSizeResue +func CanSizeResue(cap int) bool { + return cap <= int(option.LimitBufferSize) +} |