class BoundedHash

Public Class Methods

new(size_limit) click to toggle source
# File lib/bounded_hash.rb, line 3
def initialize(size_limit)
  @size_limit = size_limit
  @values = Hash.new # stores user-supplied mappings
  @next_entry_id = 0
  @entries = Hash.new # maps entry ids to keys. lower ids = older keys.
  self
end

Public Instance Methods

[](k) click to toggle source
# File lib/bounded_hash.rb, line 11
def [] (k)
  @values[k]
end
[]=(k, v) click to toggle source
# File lib/bounded_hash.rb, line 15
def []= (k, v)
  @values[k] = v
  @entries[@next_entry_id += 1] = k
  ensure_bounds
  self
end
ensure_bounds() click to toggle source
# File lib/bounded_hash.rb, line 22
def ensure_bounds
  while @values.length > @size_limit do
    i = @entries.keys.min
    @values.delete(@entries[i])
    @entries.delete(i)
  end
end