summaryrefslogtreecommitdiffhomepage
path: root/bufferpool/bufpool.go
diff options
context:
space:
mode:
Diffstat (limited to 'bufferpool/bufpool.go')
-rw-r--r--bufferpool/bufpool.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/bufferpool/bufpool.go b/bufferpool/bufpool.go
new file mode 100644
index 000000000..c1e4105d0
--- /dev/null
+++ b/bufferpool/bufpool.go
@@ -0,0 +1,38 @@
+// Copyright 2015 The Hugo Authors. All rights reserved.
+//
+// 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 bufferpool provides a pool of bytes buffers.
+package bufferpool
+
+import (
+ "bytes"
+ "sync"
+)
+
+var bufferPool = &sync.Pool{
+ New: func() interface{} {
+ return &bytes.Buffer{}
+ },
+}
+
+// GetBuffer returns a buffer from the pool.
+func GetBuffer() (buf *bytes.Buffer) {
+ return bufferPool.Get().(*bytes.Buffer)
+}
+
+// PutBuffer returns a buffer to the pool.
+// The buffer is reset before it is put back into circulation.
+func PutBuffer(buf *bytes.Buffer) {
+ buf.Reset()
+ bufferPool.Put(buf)
+}