Ruby 1.9 makes our life easier, Hash is already ordered
This is an ultra efficient 1.9 freindly implementation
Ruby 1.9 makes our life easier, Hash is already ordered
This is an ultra efficient 1.9 freindly implementation
# File lib/lru_redux/cache.rb, line 5 def initialize(*args) max_size, _ = args raise ArgumentError.new(:max_size) if max_size < 1 @max_size = max_size @data = {} end
# File lib/lru_redux/cache.rb, line 50 def [](key) found = true value = @data.delete(key){ found = false } if found @data[key] = value else nil end end
# File lib/lru_redux/cache.rb, line 60 def []=(key,val) @data.delete(key) @data[key] = val @data.shift if @data.length > @max_size val end
# File lib/lru_redux/cache.rb, line 94 def clear @data.clear end
# File lib/lru_redux/cache.rb, line 98 def count @data.size end
# File lib/lru_redux/cache.rb, line 82 def delete(key) @data.delete(key) end
# File lib/lru_redux/cache.rb, line 67 def each array = @data.to_a array.reverse!.each do |pair| yield pair end end
# File lib/lru_redux/cache.rb, line 40 def fetch(key) found = true value = @data.delete(key){ found = false } if found @data[key] = value else yield if block_given? end end
# File lib/lru_redux/cache.rb, line 28 def getset(key) found = true value = @data.delete(key){ found = false } if found @data[key] = value else result = @data[key] = yield @data.shift if @data.length > @max_size result end end
# File lib/lru_redux/cache.rb, line 88 def key?(key) @data.key?(key) end
# File lib/lru_redux/cache.rb, line 14 def max_size=(max_size) max_size ||= @max_size raise ArgumentError.new(:max_size) if max_size < 1 @max_size = max_size @data.shift while @data.size > @max_size end
# File lib/lru_redux/cache.rb, line 77 def to_a array = @data.to_a array.reverse! end
# File lib/lru_redux/cache.rb, line 24 def ttl=(_) nil end
for cache validation only, ensures all is sound
# File lib/lru_redux/cache.rb, line 105 def valid? true end