parent
d6b65f1f04
commit
9ef1ef5c8c
@ -1,64 +0,0 @@ |
||||
/* |
||||
* Mini Object Storage, (C) 2014 Minio, Inc. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package erasure |
||||
|
||||
import ( |
||||
"github.com/golang/groupcache/lru" |
||||
"sync" |
||||
) |
||||
|
||||
// thread-safe LRU cache from GroupCache
|
||||
type Cache struct { |
||||
mutex sync.RWMutex |
||||
cache *lru.Cache |
||||
} |
||||
|
||||
var DefaultCache *Cache = GetCache(0) |
||||
|
||||
// Allocate ``Cache`` LRU
|
||||
func GetCache(capacity int) *Cache { |
||||
return &Cache{ |
||||
cache: lru.New(capacity), |
||||
} |
||||
} |
||||
|
||||
// ``GetC()`` -- Grab encoder from LRU
|
||||
func (c *Cache) GetC(ep *EncoderParams) *Encoder { |
||||
if encoder, ret := c._Get(ep); ret { |
||||
return encoder |
||||
} |
||||
encoder := NewEncoder(ep) |
||||
c._Put(ep, encoder) |
||||
return encoder |
||||
} |
||||
|
||||
// ``_Get()`` -- Get key from existing LRU
|
||||
func (c *Cache) _Get(ep *EncoderParams) (*Encoder, bool) { |
||||
c.mutex.RLock() |
||||
defer c.mutex.RUnlock() |
||||
if encoder, ret := c.cache.Get(ep); ret { |
||||
return encoder.(*Encoder), ret |
||||
} |
||||
return nil, false |
||||
} |
||||
|
||||
// ``_Put()`` -- Add key to existing LRU
|
||||
func (c *Cache) _Put(ep *EncoderParams, encoder *Encoder) { |
||||
c.mutex.Lock() |
||||
defer c.mutex.Unlock() |
||||
c.cache.Add(ep, encoder) |
||||
} |
Loading…
Reference in new issue