summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2015-04-22 17:27:58 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2015-04-22 17:27:58 -0700
commitd030172d7ef807d85391d32c5456b1b97b15a402 (patch)
tree218279a68a56499e337012f1331378d0341ddf52 /src
parentd7aacbbd49b9524a2eb265fe8aa7634844bf57bb (diff)
parent302562f86e418630b476852b9ba235e85f98bacb (diff)
downloadscala-d030172d7ef807d85391d32c5456b1b97b15a402.tar.gz
scala-d030172d7ef807d85391d32c5456b1b97b15a402.tar.bz2
scala-d030172d7ef807d85391d32c5456b1b97b15a402.zip
Merge pull request #4415 from Ichoran/issue/9254
SI-9254 UnrolledBuffer appends in wrong position
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/collection/mutable/UnrolledBuffer.scala12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/library/scala/collection/mutable/UnrolledBuffer.scala b/src/library/scala/collection/mutable/UnrolledBuffer.scala
index 0a84a2b2a8..2212486bcf 100644
--- a/src/library/scala/collection/mutable/UnrolledBuffer.scala
+++ b/src/library/scala/collection/mutable/UnrolledBuffer.scala
@@ -208,7 +208,7 @@ object UnrolledBuffer extends ClassTagTraversableFactory[UnrolledBuffer] {
def newBuilder[T](implicit t: ClassTag[T]): Builder[T, UnrolledBuffer[T]] = new UnrolledBuffer[T]
val waterline = 50
- val waterlineDelim = 100
+ val waterlineDelim = 100 // TODO -- fix this name! It's a denominator, not a delimiter. (But it's part of the API so we can't just change it.)
private[collection] val unrolledlength = 32
/** Unrolled buffer node.
@@ -319,13 +319,15 @@ object UnrolledBuffer extends ClassTagTraversableFactory[UnrolledBuffer] {
for (elem <- t) curr = curr append elem
curr.next = newnextnode
- // try to merge the last node of this with the newnextnode
+ // try to merge the last node of this with the newnextnode and fix tail pointer if needed
if (curr.tryMergeWithNext()) buffer.lastPtr = curr
+ else if (newnextnode.next eq null) buffer.lastPtr = newnextnode
}
- else if (idx == size) {
+ else if (idx == size || (next eq null)) {
var curr = this
for (elem <- t) curr = curr append elem
- } else insertAll(idx - size, t, buffer)
+ }
+ else next.insertAll(idx - size, t, buffer)
}
private def nullout(from: Int, until: Int) {
var idx = from
@@ -344,7 +346,7 @@ object UnrolledBuffer extends ClassTagTraversableFactory[UnrolledBuffer] {
tryMergeWithNext()
}
- override def toString = array.take(size).mkString("Unrolled[" + array.length + "](", ", ", ")") + " -> " + (if (next ne null) next.toString else "")
+ override def toString = array.take(size).mkString("Unrolled@%08x".format(System.identityHashCode(this)) + "[" + size + "/" + array.length + "](", ", ", ")") + " -> " + (if (next ne null) next.toString else "")
}
}