From 6c6535120ca43a57d31b60ae386c34339b44fa10 Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Mon, 17 Feb 2025 18:39:54 +0530 Subject: Bootstraped code for housekeeping operations --- evict.go | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'evict.go') diff --git a/evict.go b/evict.go index 987aa04..5e75342 100644 --- a/evict.go +++ b/evict.go @@ -2,10 +2,10 @@ package cache import "errors" -type EvictionPolicy int +type EvictionPolicyType int const ( - StrategyNone EvictionPolicy = iota + StrategyNone EvictionPolicyType = iota StrategyFIFO StrategyLRU StrategyLFU @@ -17,23 +17,30 @@ type EvictionStrategies interface { Evict() *Node } -func (e EvictionPolicy) ToStratergy(evict *Node) (EvictionStrategies, error) { - store := map[EvictionPolicy]func() EvictionStrategies{ +type EvictionPolicy struct { + EvictionStrategies + Type EvictionPolicyType + evict *Node +} + +func (e *EvictionPolicy) SetPolicy(y EvictionPolicyType) error { + store := map[EvictionPolicyType]func() EvictionStrategies{ StrategyNone: func() EvictionStrategies { - return NoneStrategies{evict: evict} + return NoneStrategies{evict: e.evict} }, StrategyFIFO: func() EvictionStrategies { - return FIFOStrategies{evict: evict} + return FIFOStrategies{evict: e.evict} }, StrategyLRU: func() EvictionStrategies { - return LRUStrategies{evict: evict} + return LRUStrategies{evict: e.evict} }, } - factory, ok := store[e] + factory, ok := store[y] if !ok { - return nil, errors.New("Invalid Policy") + return errors.New("Invalid Policy") } - return factory(), nil + e.EvictionStrategies = factory() + return nil } type NoneStrategies struct { @@ -102,7 +109,6 @@ func (s LFUStrategies) OnInsert(node *Node) { node.EvictNext = node.EvictPrev.EvictNext node.EvictNext.EvictPrev = node node.EvictPrev.EvictNext = node - } func (s LFUStrategies) OnAccess(node *Node) { -- cgit v1.2.3-70-g09d2