From 31b2a3faef704801373f36d556a64ee03e2f73a1 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 25 Aug 2014 21:17:50 -0700 Subject: [PATCH] Add new pools package, to aggregate common sync.Pool types. Change-Id: I69a21844f38ca3452497726d4786bd144d0218f0 --- pkg/pools/pools.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pkg/pools/pools.go diff --git a/pkg/pools/pools.go b/pkg/pools/pools.go new file mode 100644 index 000000000..4fc2f2e91 --- /dev/null +++ b/pkg/pools/pools.go @@ -0,0 +1,41 @@ +/* +Copyright 2014 The Camlistore Authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package pools + +import ( + "bytes" + "sync" +) + +// bytesBuffer is a pool of *bytes.Buffer. +// Callers must Reset the buffer after obtaining it. +var bytesBuffer = sync.Pool{ + New: func() interface{} { return new(bytes.Buffer) }, +} + +// BytesBuffer returns an empty bytes.Buffer. +// It should be returned with PutBuffer. +func BytesBuffer() *bytes.Buffer { + buf := bytesBuffer.Get().(*bytes.Buffer) + buf.Reset() + return buf +} + +// PutBuffer returns a bytes.Buffer previously obtained with BytesBuffer. +func PutBuffer(buf *bytes.Buffer) { + bytesBuffer.Put(buf) +}