diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-12-13 11:13:51 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-12-13 11:13:51 -0800 |
commit | f1131b60a2f8cd4cafc42073ee1f2f4bdd0c983d (patch) | |
tree | fb710acd833d7bdce2262ba701bd37f4ce2ef2ac /src | |
parent | 2752758e8321368302c8c50824396e58a58b29ab (diff) | |
parent | f0f0a5e7813501d985174d3c5573c34c8a7608c6 (diff) | |
download | scala-f1131b60a2f8cd4cafc42073ee1f2f4bdd0c983d.tar.gz scala-f1131b60a2f8cd4cafc42073ee1f2f4bdd0c983d.tar.bz2 scala-f1131b60a2f8cd4cafc42073ee1f2f4bdd0c983d.zip |
Merge pull request #3250 from soc/SI-8059
SI-8059 Override immutable.Queue#{+:,:+} for performance
Diffstat (limited to 'src')
-rw-r--r-- | src/library/scala/collection/immutable/Queue.scala | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/library/scala/collection/immutable/Queue.scala b/src/library/scala/collection/immutable/Queue.scala index df1484c4ab..264304db68 100644 --- a/src/library/scala/collection/immutable/Queue.scala +++ b/src/library/scala/collection/immutable/Queue.scala @@ -89,6 +89,16 @@ class Queue[+A] protected(protected val in: List[A], protected val out: List[A]) */ override def length = in.length + out.length + override def +:[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Queue[A], B, That]): That = bf match { + case _: Queue.GenericCanBuildFrom[_] => new Queue(in, elem :: out).asInstanceOf[That] + case _ => super.+:(elem)(bf) + } + + override def :+[B >: A, That](elem: B)(implicit bf: CanBuildFrom[Queue[A], B, That]): That = bf match { + case _: Queue.GenericCanBuildFrom[_] => enqueue(elem).asInstanceOf[That] + case _ => super.:+(elem)(bf) + } + /** Creates a new queue with element added at the end * of the old queue. * @@ -118,7 +128,7 @@ class Queue[+A] protected(protected val in: List[A], protected val out: List[A]) case x :: xs => (x, new Queue(in, xs)) case _ => throw new NoSuchElementException("dequeue on empty queue") } - + /** Optionally retrieves the first element and a queue of the remaining elements. * * @return A tuple of the first element of the queue, and a new queue with this element removed. |