2015-11-24 16:44:37 +00:00
|
|
|
package tsm1
|
|
|
|
|
2016-09-21 22:26:55 +00:00
|
|
|
import (
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"github.com/influxdata/influxdb/pkg/pool"
|
|
|
|
)
|
2015-11-24 16:44:37 +00:00
|
|
|
|
|
|
|
var (
|
2016-12-02 17:45:43 +00:00
|
|
|
bufPool = pool.NewBytes(10)
|
2015-11-24 16:44:37 +00:00
|
|
|
float64ValuePool sync.Pool
|
2016-01-18 22:48:49 +00:00
|
|
|
integerValuePool sync.Pool
|
2015-11-04 21:06:06 +00:00
|
|
|
booleanValuePool sync.Pool
|
2015-11-24 16:44:37 +00:00
|
|
|
stringValuePool sync.Pool
|
|
|
|
)
|
|
|
|
|
|
|
|
// getBuf returns a buffer with length size from the buffer pool.
|
|
|
|
func getBuf(size int) []byte {
|
2016-09-21 22:26:55 +00:00
|
|
|
return bufPool.Get(size)
|
2015-11-24 16:44:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// putBuf returns a buffer to the pool.
|
|
|
|
func putBuf(buf []byte) {
|
|
|
|
bufPool.Put(buf)
|
|
|
|
}
|
|
|
|
|
|
|
|
// getBuf returns a buffer with length size from the buffer pool.
|
|
|
|
func getFloat64Values(size int) []Value {
|
|
|
|
var buf []Value
|
|
|
|
x := float64ValuePool.Get()
|
|
|
|
if x == nil {
|
|
|
|
buf = make([]Value, size)
|
|
|
|
} else {
|
|
|
|
buf = x.([]Value)
|
|
|
|
}
|
|
|
|
if cap(buf) < size {
|
|
|
|
return make([]Value, size)
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, v := range buf {
|
|
|
|
if v == nil {
|
2016-11-15 19:43:00 +00:00
|
|
|
buf[i] = FloatValue{}
|
2015-11-24 16:44:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return buf[:size]
|
|
|
|
}
|
|
|
|
|
|
|
|
// putBuf returns a buffer to the pool.
|
|
|
|
func putFloat64Values(buf []Value) {
|
|
|
|
float64ValuePool.Put(buf)
|
|
|
|
}
|
|
|
|
|
|
|
|
// getBuf returns a buffer with length size from the buffer pool.
|
2016-01-18 22:48:49 +00:00
|
|
|
func getIntegerValues(size int) []Value {
|
2015-11-24 16:44:37 +00:00
|
|
|
var buf []Value
|
2016-01-18 22:48:49 +00:00
|
|
|
x := integerValuePool.Get()
|
2015-11-24 16:44:37 +00:00
|
|
|
if x == nil {
|
|
|
|
buf = make([]Value, size)
|
|
|
|
} else {
|
|
|
|
buf = x.([]Value)
|
|
|
|
}
|
|
|
|
if cap(buf) < size {
|
|
|
|
return make([]Value, size)
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, v := range buf {
|
|
|
|
if v == nil {
|
2016-11-15 19:43:00 +00:00
|
|
|
buf[i] = IntegerValue{}
|
2015-11-24 16:44:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return buf[:size]
|
|
|
|
}
|
|
|
|
|
|
|
|
// putBuf returns a buffer to the pool.
|
2016-01-18 22:48:49 +00:00
|
|
|
func putIntegerValues(buf []Value) {
|
|
|
|
integerValuePool.Put(buf)
|
2015-11-24 16:44:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// getBuf returns a buffer with length size from the buffer pool.
|
2015-11-04 21:06:06 +00:00
|
|
|
func getBooleanValues(size int) []Value {
|
2015-11-24 16:44:37 +00:00
|
|
|
var buf []Value
|
2015-11-04 21:06:06 +00:00
|
|
|
x := booleanValuePool.Get()
|
2015-11-24 16:44:37 +00:00
|
|
|
if x == nil {
|
|
|
|
buf = make([]Value, size)
|
|
|
|
} else {
|
|
|
|
buf = x.([]Value)
|
|
|
|
}
|
|
|
|
if cap(buf) < size {
|
|
|
|
return make([]Value, size)
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, v := range buf {
|
|
|
|
if v == nil {
|
2016-11-15 19:43:00 +00:00
|
|
|
buf[i] = BooleanValue{}
|
2015-11-24 16:44:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return buf[:size]
|
|
|
|
}
|
|
|
|
|
|
|
|
// putBuf returns a buffer to the pool.
|
|
|
|
func putStringValues(buf []Value) {
|
|
|
|
stringValuePool.Put(buf)
|
|
|
|
}
|
|
|
|
|
|
|
|
// getBuf returns a buffer with length size from the buffer pool.
|
|
|
|
func getStringValues(size int) []Value {
|
|
|
|
var buf []Value
|
|
|
|
x := stringValuePool.Get()
|
|
|
|
if x == nil {
|
|
|
|
buf = make([]Value, size)
|
|
|
|
} else {
|
|
|
|
buf = x.([]Value)
|
|
|
|
}
|
|
|
|
if cap(buf) < size {
|
|
|
|
return make([]Value, size)
|
|
|
|
}
|
|
|
|
|
|
|
|
for i, v := range buf {
|
|
|
|
if v == nil {
|
2016-11-15 19:43:00 +00:00
|
|
|
buf[i] = StringValue{}
|
2015-11-24 16:44:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return buf[:size]
|
|
|
|
}
|
|
|
|
|
|
|
|
// putBuf returns a buffer to the pool.
|
2015-11-04 21:06:06 +00:00
|
|
|
func putBooleanValues(buf []Value) {
|
|
|
|
booleanValuePool.Put(buf)
|
2015-11-24 16:44:37 +00:00
|
|
|
}
|
|
|
|
func putValue(buf []Value) {
|
|
|
|
if len(buf) > 0 {
|
|
|
|
switch buf[0].(type) {
|
2016-11-15 19:43:00 +00:00
|
|
|
case FloatValue:
|
2015-11-24 16:44:37 +00:00
|
|
|
putFloat64Values(buf)
|
2016-11-15 19:43:00 +00:00
|
|
|
case IntegerValue:
|
2016-01-18 22:48:49 +00:00
|
|
|
putIntegerValues(buf)
|
2016-11-15 19:43:00 +00:00
|
|
|
case BooleanValue:
|
2015-11-04 21:06:06 +00:00
|
|
|
putBooleanValues(buf)
|
2016-11-15 19:43:00 +00:00
|
|
|
case StringValue:
|
2015-11-04 21:06:06 +00:00
|
|
|
putStringValues(buf)
|
2015-11-24 16:44:37 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|