| Class | Wee::LRUCache |
| In: |
lib/wee/lru_cache.rb
|
| Parent: | Object |
Implementation of a Least Recently Used (LRU) Cache
# File lib/wee/lru_cache.rb, line 13 def initialize(capacity=20, &replace_callback) @capacity = capacity @replace_callback = replace_callback @store = Hash.new @time = 0 end
# File lib/wee/lru_cache.rb, line 28 def delete_if @store.delete_if {|id, item| yield id, item.value } end
# File lib/wee/lru_cache.rb, line 34 def fetch(key, default_value=nil) if item = @store[key] item.time = (@time += 1) item.value else default_value end end
# File lib/wee/lru_cache.rb, line 43 def store(key, value) if item = @store[key] # update item only item.time = (@time += 1) item.value = value else # insert new item item = Item.new item.time = (@time += 1) item.value = value garbage_collect() if @store.size >= @capacity while @store.size >= @capacity old_item = @store.delete(min_key()) || raise @replace_callback.call(old_item) if @replace_callback end @store[key] = item end end