class ThreadSafe::AtomicReferenceCacheBackend::Table

def cas_new_node(i, hash, key, value)

def cas_new_node(i, hash, key, value)
  cas(i, nil, Node.new(hash, key, value))
end

def delete_node_at(i, node, predecessor_node)

def delete_node_at(i, node, predecessor_node)
  if predecessor_node
    predecessor_node.next = node.next
  else
    volatile_set(i, node.next)
  end
end

def try_lock_via_hash(i, node, node_hash)

def try_lock_via_hash(i, node, node_hash)
  node.try_lock_via_hash(node_hash) do
    yield if volatile_get(i) == node
  end
end

def try_to_cas_in_computed(i, hash, key)

def try_to_cas_in_computed(i, hash, key)
  succeeded = false
  new_value = nil
  new_node  = Node.new(locked_hash = hash | LOCKED, key, NULL)
  if cas(i, nil, new_node)
    begin
      if NULL == (new_value = yield(NULL))
        was_null = true
      else
        new_node.value = new_value
      end
      succeeded = true
    ensure
      volatile_set(i, nil) if !succeeded || was_null
      new_node.unlock_via_hash(locked_hash, hash)
    end
  end
  return succeeded, new_value
end