diff options
author | Philipp Haller <hallerp@gmail.com> | 2009-11-03 16:16:51 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2009-11-03 16:16:51 +0000 |
commit | d7f7a3e001fb825240554a02a7cff72bef96f409 (patch) | |
tree | 0db2b15e801396e79bcf28823414e9ee4fd33a63 /src | |
parent | 04fb01d1315c39cc316f1e16715110a7f3c116cb (diff) | |
download | scala-d7f7a3e001fb825240554a02a7cff72bef96f409.tar.gz scala-d7f7a3e001fb825240554a02a7cff72bef96f409.tar.bz2 scala-d7f7a3e001fb825240554a02a7cff72bef96f409.zip |
Applied patch for #2524.
Diffstat (limited to 'src')
-rw-r--r-- | src/library/scala/collection/mutable/HashTable.scala | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/library/scala/collection/mutable/HashTable.scala b/src/library/scala/collection/mutable/HashTable.scala index 6726a3dbbc..9d3a35376c 100644 --- a/src/library/scala/collection/mutable/HashTable.scala +++ b/src/library/scala/collection/mutable/HashTable.scala @@ -45,12 +45,27 @@ trait HashTable[A] { /** The initial threshold */ - protected def initialThreshold: Int = newThreshold(initialSize) + protected def initialThreshold: Int = newThreshold(initialCapacity) /** The actual hash table. */ - protected var table: Array[HashEntry[A, Entry]] = - if (initialSize == 0) null else new Array(initialSize) + protected var table: Array[HashEntry[A, Entry]] = new Array(initialCapacity) + + private def initialCapacity = if (initialSize == 0) 1 else powerOfTwo(initialSize) + + /** + * Returns a power of two >= `target`. + */ + private def powerOfTwo(target: Int): Int = { + /* See http://bits.stephan-brumme.com/roundUpToNextPowerOfTwo.html */ + var c = target - 1; + c |= c >>> 1; + c |= c >>> 2; + c |= c >>> 4; + c |= c >>> 8; + c |= c >>> 16; + c + 1; + } /** The number of mappings contained in this hash table. */ |