@@ -68,6 +68,8 @@ object BitSet extends BitSetFactory[BitSet] {
68
68
/** The empty bitset */
69
69
val empty : BitSet = new BitSet1 (0L )
70
70
71
+ private def createSmall (a : Long , b : Long ): BitSet = if (b == 0L ) new BitSet1 (a) else new BitSet2 (a, b)
72
+
71
73
/** A builder that takes advantage of mutable BitSets. */
72
74
def newBuilder : Builder [Int , BitSet ] = new Builder [Int , BitSet ] {
73
75
private [this ] val b = new mutable.BitSet
@@ -84,7 +86,7 @@ object BitSet extends BitSetFactory[BitSet] {
84
86
val len = elems.length
85
87
if (len == 0 ) empty
86
88
else if (len == 1 ) new BitSet1 (elems(0 ))
87
- else if (len == 2 ) new BitSet2 (elems(0 ), elems(1 ))
89
+ else if (len == 2 ) createSmall (elems(0 ), elems(1 ))
88
90
else {
89
91
val a = new Array [Long ](len)
90
92
Array .copy(elems, 0 , a, 0 , len)
@@ -99,7 +101,7 @@ object BitSet extends BitSetFactory[BitSet] {
99
101
val len = elems.length
100
102
if (len == 0 ) empty
101
103
else if (len == 1 ) new BitSet1 (elems(0 ))
102
- else if (len == 2 ) new BitSet2 (elems(0 ), elems(1 ))
104
+ else if (len == 2 ) createSmall (elems(0 ), elems(1 ))
103
105
else new BitSetN (elems)
104
106
}
105
107
@@ -109,7 +111,7 @@ object BitSet extends BitSetFactory[BitSet] {
109
111
protected def word (idx : Int ) = if (idx == 0 ) elems else 0L
110
112
protected def updateWord (idx : Int , w : Long ): BitSet =
111
113
if (idx == 0 ) new BitSet1 (w)
112
- else if (idx == 1 ) new BitSet2 (elems, w)
114
+ else if (idx == 1 ) createSmall (elems, w)
113
115
else fromBitMaskNoCopy(updateArray(Array (elems), idx, w))
114
116
override def head : Int =
115
117
if (elems == 0L ) throw new NoSuchElementException (" Empty BitSet" )
@@ -124,7 +126,7 @@ object BitSet extends BitSetFactory[BitSet] {
124
126
protected def word (idx : Int ) = if (idx == 0 ) elems0 else if (idx == 1 ) elems1 else 0L
125
127
protected def updateWord (idx : Int , w : Long ): BitSet =
126
128
if (idx == 0 ) new BitSet2 (w, elems1)
127
- else if (idx == 1 ) new BitSet2 (elems0, w)
129
+ else if (idx == 1 ) createSmall (elems0, w)
128
130
else fromBitMaskNoCopy(updateArray(Array (elems0, elems1), idx, w))
129
131
override def head : Int =
130
132
if (elems0 == 0L ) {
@@ -135,7 +137,7 @@ object BitSet extends BitSetFactory[BitSet] {
135
137
override def tail : BitSet =
136
138
if (elems0 == 0L ) {
137
139
if (elems1 == 0L ) throw new NoSuchElementException (" Empty BitSet" )
138
- new BitSet2 (elems0, elems1 - java.lang.Long .lowestOneBit(elems1))
140
+ createSmall (elems0, elems1 - java.lang.Long .lowestOneBit(elems1))
139
141
}
140
142
else new BitSet2 (elems0 - java.lang.Long .lowestOneBit(elems0), elems1)
141
143
}
0 commit comments