1package cache
2
3import (
4 lru "github.com/hashicorp/golang-lru"
5
6 "github.com/MichaelMure/git-bug/entity"
7)
8
9type LRUIdCache struct {
10 parentCache *lru.Cache
11 maxSize int
12 onEvict func(id entity.Id)
13}
14
15func NewLRUIdCache(size int, onEvicted func(id entity.Id)) (*LRUIdCache, error) {
16 cache, err := lru.New(size)
17 if err != nil {
18 return nil, err
19 }
20
21 return &LRUIdCache{
22 cache,
23 size,
24 onEvicted,
25 }, nil
26}
27
28func (c *LRUIdCache) Add(id entity.Id) bool {
29 return c.parentCache.Add(id, nil)
30}
31
32func (c *LRUIdCache) Contains(id entity.Id) bool {
33 return c.parentCache.Contains(id)
34}
35
36func (c *LRUIdCache) Get(id entity.Id) bool {
37 _, present := c.parentCache.Get(id)
38 return present
39}
40
41func (c *LRUIdCache) GetOldest() (entity.Id, bool) {
42 id, _, present := c.parentCache.GetOldest()
43 return id.(entity.Id), present
44}
45
46func (c *LRUIdCache) GetAll() (ids []entity.Id) {
47 interfaceKeys := c.parentCache.Keys()
48 for _, id := range interfaceKeys {
49 ids = append(ids, id.(entity.Id))
50 }
51 return
52}
53
54func (c *LRUIdCache) Len() int {
55 return c.parentCache.Len()
56}
57
58func (c *LRUIdCache) Remove(id entity.Id) bool {
59 return c.parentCache.Remove(id)
60}
61
62func (c *LRUIdCache) Resize(size int) int {
63 return c.parentCache.Resize(size)
64}