1// Copyright (c) 2014 Couchbase, Inc. 2// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file 3// except in compliance with the License. You may obtain a copy of the License at 4// http://www.apache.org/licenses/LICENSE-2.0 5// Unless required by applicable law or agreed to in writing, software distributed under the 6// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 7// either express or implied. See the License for the specific language governing permissions 8// and limitations under the License. 9 10package planner 11 12import ( 13 "sync" 14) 15 16type SargSpansPool struct { 17 pool *sync.Pool 18 size int 19} 20 21func NewSargSpansPool(size int) *SargSpansPool { 22 rv := &SargSpansPool{ 23 pool: &sync.Pool{ 24 New: func() interface{} { 25 return make([]SargSpans, 0, size) 26 }, 27 }, 28 size: size, 29 } 30 31 return rv 32} 33 34func (this *SargSpansPool) Get() []SargSpans { 35 return this.pool.Get().([]SargSpans) 36} 37 38func (this *SargSpansPool) GetSized(length int) []SargSpans { 39 if length > this.size { 40 return make([]SargSpans, length) 41 } 42 43 rv := this.Get() 44 rv = rv[0:length] 45 for i := 0; i < length; i++ { 46 rv[i] = nil 47 } 48 49 return rv 50} 51 52func (this *SargSpansPool) Put(s []SargSpans) { 53 if cap(s) != this.size { 54 return 55 } 56 57 this.pool.Put(s[0:0]) 58} 59 60func (this *SargSpansPool) Size() int { 61 return this.size 62} 63