From 4c3ff12cba9561c06e22bb17c31f2035b5b437b8 Mon Sep 17 00:00:00 2001 From: dk Date: Fri, 3 Jul 2020 18:23:44 -0700 Subject: [PATCH] abstracted cache to an interface (#535) --- d2common/cache.go | 11 ++++++++++- d2common/d2interface/cache.go | 11 +++++++++++ d2core/d2asset/animation_manager.go | 2 +- d2core/d2asset/archive_manager.go | 3 ++- d2core/d2asset/file_manager.go | 3 ++- d2core/d2asset/font_manager.go | 3 ++- d2core/d2asset/palette_manager.go | 3 ++- d2core/d2asset/palette_transform_manager.go | 3 ++- 8 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 d2common/d2interface/cache.go diff --git a/d2common/cache.go b/d2common/cache.go index 37ee643c..1a1d487e 100644 --- a/d2common/cache.go +++ b/d2common/cache.go @@ -2,6 +2,7 @@ package d2common import ( "errors" + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface" "log" "sync" ) @@ -14,6 +15,7 @@ type cacheNode struct { weight int } +// Cache stores arbitrary data for fast retrieval type Cache struct { head *cacheNode tail *cacheNode @@ -24,22 +26,27 @@ type Cache struct { mutex sync.Mutex } -func CreateCache(budget int) *Cache { +// CreateCache creates an instance of a Cache +func CreateCache(budget int) d2interface.Cache { return &Cache{lookup: make(map[string]*cacheNode), budget: budget} } +// SetVerbose turns on verbose printing (warnings and stuff) func (c *Cache) SetVerbose(verbose bool) { c.verbose = verbose } +// GetWeight gets the "weight" of a cache func (c *Cache) GetWeight() int { return c.weight } +// GetBudget gets the memory budget of a cache func (c *Cache) GetBudget() int { return c.budget } +// Insert inserts an object into the cache func (c *Cache) Insert(key string, value interface{}, weight int) error { c.mutex.Lock() defer c.mutex.Unlock() @@ -88,6 +95,7 @@ func (c *Cache) Insert(key string, value interface{}, weight int) error { return nil } +// Retrieve gets an object out of the cache func (c *Cache) Retrieve(key string) (interface{}, bool) { c.mutex.Lock() defer c.mutex.Unlock() @@ -122,6 +130,7 @@ func (c *Cache) Retrieve(key string) (interface{}, bool) { return node.value, true } +// Clear removes all cache entries func (c *Cache) Clear() { c.mutex.Lock() defer c.mutex.Unlock() diff --git a/d2common/d2interface/cache.go b/d2common/d2interface/cache.go new file mode 100644 index 00000000..e480f41f --- /dev/null +++ b/d2common/d2interface/cache.go @@ -0,0 +1,11 @@ +package d2interface + +// Cache stores arbitrary data for fast retrieval +type Cache interface { + SetVerbose(verbose bool) + GetWeight() int + GetBudget() int + Insert(key string, value interface{}, weight int) error + Retrieve(key string) (interface{}, bool) + Clear() +} diff --git a/d2core/d2asset/animation_manager.go b/d2core/d2asset/animation_manager.go index 866730ea..94ed24b8 100644 --- a/d2core/d2asset/animation_manager.go +++ b/d2core/d2asset/animation_manager.go @@ -15,7 +15,7 @@ const ( ) type animationManager struct { - cache *d2common.Cache + cache d2interface.Cache renderer d2interface.Renderer } diff --git a/d2core/d2asset/archive_manager.go b/d2core/d2asset/archive_manager.go index 1cfe09de..a9e02462 100644 --- a/d2core/d2asset/archive_manager.go +++ b/d2core/d2asset/archive_manager.go @@ -2,6 +2,7 @@ package d2asset import ( "errors" + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface" "path" "sync" @@ -16,7 +17,7 @@ type archiveEntry struct { } type archiveManager struct { - cache *d2common.Cache + cache d2interface.Cache config *d2config.Configuration entries []archiveEntry mutex sync.Mutex diff --git a/d2core/d2asset/file_manager.go b/d2core/d2asset/file_manager.go index 4a4e32e4..78b16fc4 100644 --- a/d2core/d2asset/file_manager.go +++ b/d2core/d2asset/file_manager.go @@ -2,6 +2,7 @@ package d2asset import ( "github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2mpq" + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface" "strings" "github.com/OpenDiablo2/OpenDiablo2/d2common" @@ -14,7 +15,7 @@ const ( ) type fileManager struct { - cache *d2common.Cache + cache d2interface.Cache archiveManager *archiveManager config *d2config.Configuration } diff --git a/d2core/d2asset/font_manager.go b/d2core/d2asset/font_manager.go index 1d4fca60..9266c178 100644 --- a/d2core/d2asset/font_manager.go +++ b/d2core/d2asset/font_manager.go @@ -2,6 +2,7 @@ package d2asset import ( "fmt" + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface" "github.com/OpenDiablo2/OpenDiablo2/d2common" ) @@ -11,7 +12,7 @@ const ( ) type fontManager struct { - cache *d2common.Cache + cache d2interface.Cache } func createFontManager() *fontManager { diff --git a/d2core/d2asset/palette_manager.go b/d2core/d2asset/palette_manager.go index 09be86ae..cc9d2972 100644 --- a/d2core/d2asset/palette_manager.go +++ b/d2core/d2asset/palette_manager.go @@ -3,10 +3,11 @@ package d2asset import ( "github.com/OpenDiablo2/OpenDiablo2/d2common" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2dat" + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface" ) type paletteManager struct { - cache *d2common.Cache + cache d2interface.Cache } const ( diff --git a/d2core/d2asset/palette_transform_manager.go b/d2core/d2asset/palette_transform_manager.go index a14e1699..64b2e099 100644 --- a/d2core/d2asset/palette_transform_manager.go +++ b/d2core/d2asset/palette_transform_manager.go @@ -3,10 +3,11 @@ package d2asset import ( "github.com/OpenDiablo2/OpenDiablo2/d2common" "github.com/OpenDiablo2/OpenDiablo2/d2common/d2fileformats/d2pl2" + "github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface" ) type paletteTransformManager struct { - cache *d2common.Cache + cache d2interface.Cache } const (