1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
module RR
# TODO: Refactor to a side-effect-free strategy.
class HashWithObjectIdKey < ::Hash #:nodoc:
def initialize
@keys = {}
super
end
alias_method :get_with_object_id, :[]
def [](key)
@keys[key.__id__] = key
super(key.__id__)
end
def has_key?(key)
super(key.__id__)
end
alias_method :set_with_object_id, :[]=
def []=(key, value)
@keys[key.__id__] = key
super(key.__id__, value)
end
def each
super do |object_id, value|
yield @keys[object_id], value
end
end
def delete(key)
@keys.delete(key.__id__)
super(key.__id__)
end
def keys
@keys.values
end
def include?(key)
super(key.__id__)
end
end
end
|