diff options
author | Kandula Naveen <[email protected]> | 2024-01-14 09:45:48 +0530 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-01-28 15:11:57 +0100 |
commit | ce7daa6156befc9877b03f3c884331cfa5994742 (patch) | |
tree | d1fcde67c0ac8453469f7a49b94635c962801e7c /navigation | |
parent | 2a0329423ce4b3359842affad76c40140d426943 (diff) | |
download | hugo-ce7daa6156befc9877b03f3c884331cfa5994742.tar.gz hugo-ce7daa6156befc9877b03f3c884331cfa5994742.zip |
navigation: Improve menu cache
Diffstat (limited to 'navigation')
-rw-r--r-- | navigation/menu_cache.go | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/navigation/menu_cache.go b/navigation/menu_cache.go index b6350cd01..b2c46f7ac 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() |