Skip to content

Instantly share code, notes, and snippets.

@moro
Created June 21, 2009 14:20
Show Gist options
  • Save moro/133521 to your computer and use it in GitHub Desktop.
Save moro/133521 to your computer and use it in GitHub Desktop.
require 'forwardable'
class LRUHash
extend Forwardable
attr_reader :max_size
rb_hash_has_key = %w[has_key? include? key? member?]
def_delegators '@storage', :size, *rb_hash_has_key
def initialize(max_size=16)
@max_size = max_size
@storage = {}
@key_order = []
end
def []=(key, arg)
@storage.delete(@key_order.shift) if size >= @max_size
@key_order << key
@storage[key] = arg
end
def [](key)
@storage[key].tap{ |x| @key_order << @key_order.delete(key) if x }
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment