lru_id_cache.go

 1package cache
 2
 3import (
 4	"math"
 5
 6	lru "github.com/hashicorp/golang-lru"
 7
 8	"github.com/MichaelMure/git-bug/entity"
 9)
10
11type lruIdCache struct {
12	lru *lru.Cache
13}
14
15func newLRUIdCache() *lruIdCache {
16	// we can ignore the error here as it would only fail if the size is negative.
17	cache, _ := lru.New(math.MaxInt32)
18
19	return &lruIdCache{
20		cache,
21	}
22}
23
24func (c *lruIdCache) Add(id entity.Id) bool {
25	return c.lru.Add(id, nil)
26}
27
28func (c *lruIdCache) Contains(id entity.Id) bool {
29	return c.lru.Contains(id)
30}
31
32func (c *lruIdCache) Get(id entity.Id) bool {
33	_, present := c.lru.Get(id)
34	return present
35}
36
37func (c *lruIdCache) GetOldest() (entity.Id, bool) {
38	id, _, present := c.lru.GetOldest()
39	return id.(entity.Id), present
40}
41
42func (c *lruIdCache) GetOldestToNewest() (ids []entity.Id) {
43	interfaceKeys := c.lru.Keys()
44	for _, id := range interfaceKeys {
45		ids = append(ids, id.(entity.Id))
46	}
47	return
48}
49
50func (c *lruIdCache) Len() int {
51	return c.lru.Len()
52}
53
54func (c *lruIdCache) Remove(id entity.Id) bool {
55	return c.lru.Remove(id)
56}