class Concurrent::Collection::AtomicReferenceMapBackend

def internal_compute(key, &block)

def internal_compute(key, &block)
  hash          = key_hash(key)
  current_table = table || initialize_table
  while true
    if !(node = current_table.volatile_get(i = current_table.hash_to_index(hash)))
      succeeded, new_value = current_table.try_to_cas_in_computed(i, hash, key, &block)
      if succeeded
        if NULL == new_value
          break nil
        else
          increment_size
          break new_value
        end
      end
    elsif (node_hash = node.hash) == MOVED
      current_table = node.key
    elsif Node.locked_hash?(node_hash)
      try_await_lock(current_table, i, node)
    else
      succeeded, new_value = attempt_compute(key, hash, current_table, i, node, node_hash, &block)
      break new_value if succeeded
    end
  end
end