Adding BufferPool. Implementing BP in ReaderTo{Bytes,String}().

This commit is contained in:
spf13 2015-01-30 11:12:07 -08:00
parent d397bc4f43
commit 66ed5c5e02
2 changed files with 45 additions and 3 deletions

34
bufferpool/bufpool.go Normal file
View file

@ -0,0 +1,34 @@
// Copyright © 2013-14 Steve Francia <spf@spf13.com>.
//
// Licensed under the Simple Public 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://opensource.org/licenses/Simple-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
import (
"bytes"
"sync"
)
var bufferPool = &sync.Pool{
New: func() interface{} {
return &bytes.Buffer{}
},
}
func GetBuffer() (buf *bytes.Buffer) {
return bufferPool.Get().(*bytes.Buffer)
}
func PutBuffer(buf *bytes.Buffer) {
buf.Reset()
bufferPool.Put(buf)
}

View file

@ -22,6 +22,8 @@ import (
"net" "net"
"path/filepath" "path/filepath"
"strings" "strings"
bp "github.com/spf13/hugo/bufferpool"
) )
// Filepath separator defined by os.Separator. // Filepath separator defined by os.Separator.
@ -68,14 +70,20 @@ func GuessType(in string) string {
// ReaderToBytes takes an io.Reader argument, reads from it // ReaderToBytes takes an io.Reader argument, reads from it
// and returns bytes. // and returns bytes.
func ReaderToBytes(lines io.Reader) []byte { func ReaderToBytes(lines io.Reader) []byte {
b := new(bytes.Buffer) b := bp.GetBuffer()
defer bp.PutBuffer(b)
b.ReadFrom(lines) b.ReadFrom(lines)
return b.Bytes()
bc := make([]byte, b.Len(), b.Len())
copy(bc, b.Bytes())
return bc
} }
// ReaderToString is the same as ReaderToBytes, but returns a string. // ReaderToString is the same as ReaderToBytes, but returns a string.
func ReaderToString(lines io.Reader) string { func ReaderToString(lines io.Reader) string {
b := new(bytes.Buffer) b := bp.GetBuffer()
defer bp.PutBuffer(b)
b.ReadFrom(lines) b.ReadFrom(lines)
return b.String() return b.String()
} }