You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
727 B
39 lines
727 B
package contentenc |
|
|
|
import ( |
|
"log" |
|
"sync" |
|
) |
|
|
|
// bPool is a byte slice pool |
|
type bPool struct { |
|
sync.Pool |
|
sliceLen int |
|
} |
|
|
|
func newBPool(sliceLen int) bPool { |
|
return bPool{ |
|
Pool: sync.Pool{ |
|
New: func() interface{} { return make([]byte, sliceLen) }, |
|
}, |
|
sliceLen: sliceLen, |
|
} |
|
} |
|
|
|
// Put grows the slice "s" to its maximum capacity and puts it into the pool. |
|
func (b *bPool) Put(s []byte) { |
|
s = s[:cap(s)] |
|
if len(s) != b.sliceLen { |
|
log.Panicf("wrong len=%d, want=%d", len(s), b.sliceLen) |
|
} |
|
b.Pool.Put(s) |
|
} |
|
|
|
// Get returns a byte slice from the pool. |
|
func (b *bPool) Get() (s []byte) { |
|
s = b.Pool.Get().([]byte) |
|
if len(s) != b.sliceLen { |
|
log.Panicf("wrong len=%d, want=%d", len(s), b.sliceLen) |
|
} |
|
return s |
|
}
|
|
|