Skip to content

Commit

Permalink
navigation: Improve menu cache
Browse files Browse the repository at this point in the history
  • Loading branch information
Kandulanaveennaidu authored and bep committed Jan 28, 2024
1 parent 2a03294 commit ce7daa6
Showing 1 changed file with 7 additions and 13 deletions.
20 changes: 7 additions & 13 deletions navigation/menu_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ func (entry menuCacheEntry) matches(menuList []Menu) bool {
return true
}

// newMenuCache creates a new menuCache instance.
func newMenuCache() *menuCache {
return &menuCache{m: make(map[string][]menuCacheEntry)}
}
Expand All @@ -44,31 +45,23 @@ type menuCache struct {
m map[string][]menuCacheEntry
}

// menuEqual checks if two menus are equal.
func menuEqual(m1, m2 Menu) bool {
if m1 == nil && m2 == nil {
return true
}

if m1 == nil || m2 == nil {
return false
}

if len(m1) != len(m2) {
return false
}

if len(m1) == 0 {
return true
}

for i := 0; i < len(m1); i++ {
for i := range m1 {
if m1[i] != m2[i] {
return false
}
}

return true
}

// get retrieves a menu from the cache based on the provided key and menuLists.
// If the menu is not found, it applies the provided function and caches the result.
func (c *menuCache) get(key string, apply func(m Menu), menuLists ...Menu) (Menu, bool) {
return c.getP(key, func(m *Menu) {
if apply != nil {
Expand All @@ -77,6 +70,7 @@ func (c *menuCache) get(key string, apply func(m Menu), menuLists ...Menu) (Menu
}, menuLists...)
}

// getP is similar to get but also returns a boolean indicating whether the menu was found in the cache.
func (c *menuCache) getP(key string, apply func(m *Menu), menuLists ...Menu) (Menu, bool) {
c.Lock()
defer c.Unlock()
Expand Down

0 comments on commit ce7daa6

Please sign in to comment.