From ce7daa6156befc9877b03f3c884331cfa5994742 Mon Sep 17 00:00:00 2001 From: Kandula Naveen <104118171+Kandulanaveennaidu@users.noreply.github.com> Date: Sun, 14 Jan 2024 09:45:48 +0530 Subject: [PATCH] navigation: Improve menu cache --- navigation/menu_cache.go | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/navigation/menu_cache.go b/navigation/menu_cache.go index b6350cd010c..b2c46f7ac65 100644 --- a/navigation/menu_cache.go +++ b/navigation/menu_cache.go @@ -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)} } @@ -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 { @@ -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()