summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/mutable/FlatHashTable.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2007-01-30 11:11:58 +0000
committerMartin Odersky <odersky@gmail.com>2007-01-30 11:11:58 +0000
commit434d46045496c964572fc38df873285c5464d89b (patch)
tree5b75c3df8d864b0bc31cff36bf5fc0f8d10d8a58 /src/library/scala/collection/mutable/FlatHashTable.scala
parentc1822e42d2eed5fa307d828a4cff90efa58fb24a (diff)
downloadscala-434d46045496c964572fc38df873285c5464d89b.tar.gz
scala-434d46045496c964572fc38df873285c5464d89b.tar.bz2
scala-434d46045496c964572fc38df873285c5464d89b.zip
Diffstat (limited to 'src/library/scala/collection/mutable/FlatHashTable.scala')
-rwxr-xr-xsrc/library/scala/collection/mutable/FlatHashTable.scala17
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
}