class WeakHashMap

Public Class Methods

new() click to toggle source
# File lib/bidi/weakhashmap.rb, line 5
def initialize
  @internalHash=Hash.new
  @mutex=Mutex.new
end

Public Instance Methods

[](key) click to toggle source
# File lib/bidi/weakhashmap.rb, line 32
  def [] key
    ref=@internalHash[key]
    return nil unless ref
    GC.disable
    unless ref.weakref_alive? {
      GC.enable
      return nil
    }

    ret_value = ref.__getobj__.value
    GC.enable
    ret_value
  end

  def delete key
    @mutex.synchronize do
       @internalHash.delete key
    end
  end
end
[]=(key, value) click to toggle source
# File lib/bidi/weakhashmap.rb, line 24
def []= key, value
  refDetails=RefDetails.new @internalHash, key, value
  ref=WeakRef.new (refDetails)
  @mutex.synchronize do
    @internalHash[key]=ref
  end
end
delete(key) click to toggle source
# File lib/bidi/weakhashmap.rb, line 46
def delete key
  @mutex.synchronize do
     @internalHash.delete key
  end
end