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 datastore 11 12import ( 13 "sync" 14) 15 16type IndexBoolPool struct { 17 pool *sync.Pool 18 size int 19} 20 21func NewIndexBoolPool(size int) *IndexBoolPool { 22 rv := &IndexBoolPool{ 23 pool: &sync.Pool{ 24 New: func() interface{} { 25 return make(map[Index]bool, size) 26 }, 27 }, 28 size: size, 29 } 30 31 return rv 32} 33 34func (this *IndexBoolPool) Get() map[Index]bool { 35 return this.pool.Get().(map[Index]bool) 36} 37 38func (this *IndexBoolPool) Put(s map[Index]bool) { 39 if s == nil || len(s) > this.size { 40 return 41 } 42 43 for k, _ := range s { 44 s[k] = false 45 delete(s, k) 46 } 47 48 this.pool.Put(s) 49} 50