public INode assoc(int shift, int hash, object key, object val, Box addedLeaf)
{
if (hash == _hash)
{
if (Util.equals(key, _key))
{
if (val == _val)
return this;
// note - do not set AddedLeaf, since we are replacing
else
return new LeafNode(hash, key, val);
}
else
{
// hash collision, same hash, different keys
LeafNode newLeaf = new LeafNode(hash, key, val);
addedLeaf.Val = newLeaf;
return new HashCollisionNode(hash, this, newLeaf);
}
}
else
return BitmapIndexedNode.create(shift, this, hash, key, val, addedLeaf);
}