mirror of
https://github.com/octoleo/syncthing.git
synced 2024-11-20 03:51:00 +00:00
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
// Copyright 2016 The Internal Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package buffer implements a pool of pointers to byte slices.
|
|
//
|
|
// Example usage pattern
|
|
//
|
|
// p := buffer.Get(size)
|
|
// b := *p // Now you can use b in any way you need.
|
|
// ...
|
|
// // When b will not be used anymore
|
|
// buffer.Put(p)
|
|
// ...
|
|
// // If b or p are not going out of scope soon, optionally
|
|
// b = nil
|
|
// p = nil
|
|
//
|
|
// Otherwise the pool cannot release the buffer on garbage collection.
|
|
//
|
|
// Do not do
|
|
//
|
|
// p := buffer.Get(size)
|
|
// b := *p
|
|
// ...
|
|
// buffer.Put(&b)
|
|
//
|
|
// or
|
|
//
|
|
// b := *buffer.Get(size)
|
|
// ...
|
|
// buffer.Put(&b)
|
|
package buffer
|
|
|
|
import (
|
|
"github.com/cznic/internal/slice"
|
|
)
|
|
|
|
// CGet returns a pointer to a byte slice of len size. The pointed to byte
|
|
// slice is zeroed up to its cap. CGet panics for size < 0.
|
|
//
|
|
// CGet is safe for concurrent use by multiple goroutines.
|
|
func CGet(size int) *[]byte { return slice.Bytes.CGet(size).(*[]byte) }
|
|
|
|
// Get returns a pointer to a byte slice of len size. The pointed to byte slice
|
|
// is not zeroed. Get panics for size < 0.
|
|
//
|
|
// Get is safe for concurrent use by multiple goroutines.
|
|
func Get(size int) *[]byte { return slice.Bytes.Get(size).(*[]byte) }
|
|
|
|
// Put puts a pointer to a byte slice into a pool for possible later reuse by
|
|
// CGet or Get.
|
|
//
|
|
// Put is safe for concurrent use by multiple goroutines.
|
|
func Put(p *[]byte) { slice.Bytes.Put(p) }
|