influxdb/pkg/radix/buffer.go

32 lines
786 B
Go
Raw Normal View History

package radix
// bufferSize is the size of the buffer and the largest slice that can be
// contained in it.
const bufferSize = 4096
// buffer is a type that amoritizes allocations into larger ones, handing out
// small subslices to make copies.
type buffer []byte
// Copy returns a copy of the passed in byte slice allocated using the byte
// slice in the buffer.
func (b *buffer) Copy(x []byte) []byte {
// if we can never have enough room, just return a copy
if len(x) > bufferSize {
out := make([]byte, len(x))
copy(out, x)
return out
}
// if we don't have enough room, reallocate the buf first
if len(x) > len(*b) {
*b = make([]byte, bufferSize)
}
// create a copy and hand out a slice
copy(*b, x)
out := (*b)[:len(x):len(x)]
*b = (*b)[len(x):]
return out
}