Files
gocryptotrader/common/cache/cache.go
Andrew e5b64a5580 (COMMON): Basic (Least Recently Used) LRU caching system (#420)
* started adding basic lru cache system

* Added basic LRU cache including Add Get Remove Contains ContainsOrAdd Clear

* wording changes on comments

* removed exported var's in strut as they are not required

* Added README

* README updates

* rm line :D

* swapped to mutex over rwmutex updated comments

* unexported getNewest & getOldest

* unexported getNewest & getOldest

* Updated comments and cited references in source

* updated comments
2020-01-24 13:59:33 +11:00

76 lines
1.6 KiB
Go

package cache
// New returns a new concurrent-safe LRU cache with input capacity
func New(capacity uint64) *LRUCache {
return &LRUCache{
lru: NewLRUCache(capacity),
}
}
// Add new entry to Cache return true if entry removed
func (l *LRUCache) Add(k, v interface{}) {
l.m.Lock()
l.lru.Add(k, v)
l.m.Unlock()
}
// Get looks up a key's value from the cache.
func (l *LRUCache) Get(key interface{}) (value interface{}) {
l.m.Lock()
defer l.m.Unlock()
return l.lru.Get(key)
}
// GetOldest looks up old key's value from the cache.
func (l *LRUCache) getOldest() (key, value interface{}) {
l.m.Lock()
defer l.m.Unlock()
return l.lru.getOldest()
}
// getNewest looks up a key's value from the cache.
func (l *LRUCache) getNewest() (key, value interface{}) {
l.m.Lock()
defer l.m.Unlock()
return l.lru.getNewest()
}
// ContainsOrAdd checks if cache contains key if not adds to cache
func (l *LRUCache) ContainsOrAdd(key, value interface{}) bool {
l.m.Lock()
defer l.m.Unlock()
if l.lru.Contains(key) {
return true
}
l.lru.Add(key, value)
return false
}
// Contains checks if cache contains key
func (l *LRUCache) Contains(key interface{}) bool {
l.m.Lock()
defer l.m.Unlock()
return l.lru.Contains(key)
}
// Remove entry from cache
func (l *LRUCache) Remove(key interface{}) bool {
l.m.Lock()
defer l.m.Unlock()
return l.lru.Remove(key)
}
// Clear is used to clear the cache.
func (l *LRUCache) Clear() {
l.m.Lock()
l.lru.Clear()
l.m.Unlock()
}
// Len returns the number of items in the cache.
func (l *LRUCache) Len() uint64 {
l.m.Lock()
defer l.m.Unlock()
return l.lru.Len()
}