class UniffiHandleMap
def initialize
@lock = Monitor.new
@map = {}
@counter = 1 end
def insert(obj)
@lock.synchronize do
handle = @counter
@counter += 2
@map[handle] = obj
handle
end
end
def get(handle)
@lock.synchronize do
obj = @map[handle]
raise InternalError, "UniffiHandleMap.get: invalid handle #{handle}" if obj.nil?
obj
end
end
def clone_handle(handle)
@lock.synchronize do
obj = @map[handle]
raise InternalError, "UniffiHandleMap.clone_handle: invalid handle #{handle}" if obj.nil?
new_handle = @counter
@counter += 2
@map[new_handle] = obj
new_handle
end
end
def remove(handle)
@lock.synchronize do
obj = @map.delete(handle)
raise InternalError, "UniffiHandleMap.remove: invalid handle #{handle}" if obj.nil?
obj
end
end
def size
@lock.synchronize { @map.size }
end
end
private_constant :UniffiHandleMap