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 util 11 12import ( 13 "sync" 14) 15 16type QueuePool struct { 17 pool *sync.Pool 18 size int 19} 20 21func NewQueuePool(size int) *QueuePool { 22 rv := &QueuePool{ 23 pool: &sync.Pool{ 24 New: func() interface{} { 25 return NewQueue(size) 26 }, 27 }, 28 size: size, 29 } 30 31 return rv 32} 33 34func (this *QueuePool) Get() *Queue { 35 return this.pool.Get().(*Queue) 36} 37 38func (this *QueuePool) Put(s *Queue) { 39 if s.Capacity() != this.size { 40 return 41 } 42 43 s.Clear() 44 this.pool.Put(s) 45} 46