diff options
author | Martin Odersky <odersky@gmail.com> | 2007-01-30 11:11:58 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2007-01-30 11:11:58 +0000 |
commit | 434d46045496c964572fc38df873285c5464d89b (patch) | |
tree | 5b75c3df8d864b0bc31cff36bf5fc0f8d10d8a58 /src/library | |
parent | c1822e42d2eed5fa307d828a4cff90efa58fb24a (diff) | |
download | scala-434d46045496c964572fc38df873285c5464d89b.tar.gz scala-434d46045496c964572fc38df873285c5464d89b.tar.bz2 scala-434d46045496c964572fc38df873285c5464d89b.zip |
Diffstat (limited to 'src/library')
-rwxr-xr-x | src/library/scala/collection/mutable/FlatHashTable.scala | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/library/scala/collection/mutable/FlatHashTable.scala b/src/library/scala/collection/mutable/FlatHashTable.scala index b6400f6b09..aee4cb7fc8 100755 --- a/src/library/scala/collection/mutable/FlatHashTable.scala +++ b/src/library/scala/collection/mutable/FlatHashTable.scala @@ -67,19 +67,24 @@ trait FlatHashTable[A] { } def removeEntry(elem: A) { + def precedes(i: int, j: int, base: int) = + if (base <= i) i <= j || j < base + else i <= j && j < base var h = index(elemHashCode(elem)) var entry = table(h) while (null != entry) { if (entry == elem) { - var h1 = (h + 1) % table.length + var h0 = h + var h1 = (h0 + 1) % table.length while (null != table(h1)) { - if (index(elemHashCode(table(h1).asInstanceOf[A])) != h1) { - table(h) = table(h1) - h = h1 + val h2 = index(elemHashCode(table(h1).asInstanceOf[A])) + if (h2 != h1 && precedes(h2, h0, h)) { + table(h0) = table(h1) + h0 = h1 } - h1 = (h + 1) % table.length + h1 = (h1 + 1) % table.length } - table(h) = null + table(h1) = null tableSize = tableSize - 1 return } |