diff options
| author | 2025-11-16 00:00:00 +0000 | |
|---|---|---|
| committer | 2025-11-16 00:00:00 +0000 | |
| commit | 722cdf89ebafaf6bdc789176be5b5c2f6c98de08 (patch) | |
| tree | 410fcce6f03d7bf122e5210f8b375b23fedffde7 /buffers.go | |
| parent | Rename ObjType enum (diff) | |
| signature | ||
Extract bufpool into its own package
Diffstat (limited to 'buffers.go')
| -rw-r--r-- | buffers.go | 92 |
1 files changed, 0 insertions, 92 deletions
diff --git a/buffers.go b/buffers.go deleted file mode 100644 index ac84b837..00000000 --- a/buffers.go +++ /dev/null @@ -1,92 +0,0 @@ -package furgit - -import "sync" - -const ( - defaultBodyCap = 32 * 1024 - maxPooledBody = 8 << 20 -) - -type borrowedBody struct { - buf []byte - pooled bool -} - -var bodyPool = sync.Pool{ - New: func() any { - buf := make([]byte, 0, defaultBodyCap) - return &buf - }, -} - -func borrowBody(capHint int) borrowedBody { - if capHint < defaultBodyCap { - capHint = defaultBodyCap - } - buf := bodyPool.Get().(*[]byte) - if cap(*buf) < capHint { - bodyPool.Put(buf) - newBuf := make([]byte, 0, capHint) - return borrowedBody{buf: newBuf, pooled: false} - } - slice := (*buf)[:0] - return borrowedBody{buf: slice, pooled: true} -} - -func borrowedFromOwned(buf []byte) borrowedBody { - return borrowedBody{buf: buf} -} - -func (body *borrowedBody) Resize(n int) { - if n < 0 { - n = 0 - } - body.ensureCapacity(n) - body.buf = body.buf[:n] -} - -func (body *borrowedBody) Append(src []byte) { - if len(src) == 0 { - return - } - start := len(body.buf) - body.ensureCapacity(start + len(src)) - body.buf = body.buf[:start+len(src)] - copy(body.buf[start:], src) -} - -func (body *borrowedBody) Bytes() []byte { - return body.buf -} - -func (body *borrowedBody) Release() { - if body.buf == nil { - return - } - if body.pooled && cap(body.buf) <= maxPooledBody { - tmp := body.buf[:0] - bodyPool.Put(&tmp) - } - body.buf = nil - body.pooled = false -} - -func (body *borrowedBody) ensureCapacity(needed int) { - if cap(body.buf) >= needed { - return - } - old := body.buf - wasPooled := body.pooled - newCap := cap(body.buf) * 2 - if newCap < needed { - newCap = needed - } - newBuf := make([]byte, len(body.buf), newCap) - copy(newBuf, body.buf) - body.buf = newBuf - body.pooled = false - if wasPooled && cap(old) <= maxPooledBody { - tmp := old[:0] - bodyPool.Put(&tmp) - } -} |
