summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/collection/mutable/HashTable.scala21
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.
*/