summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/mutable/ArrayOps.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2013-03-05 08:17:25 -0800
committerPaul Phillips <paulp@improving.org>2013-03-05 08:17:25 -0800
commit773f6a8df9ef95852918a706f3f19ebf0431baa8 (patch)
tree74ed6d735d07b11ab7c5abaf13adf0e62d744f8a /src/library/scala/collection/mutable/ArrayOps.scala
parent9b0dbdf4d788c0de7f9afb6c4a72c82727615ba8 (diff)
parentad6983518dd6860564d16f5b6e99178db3cff7a2 (diff)
downloadscala-773f6a8df9ef95852918a706f3f19ebf0431baa8.tar.gz
scala-773f6a8df9ef95852918a706f3f19ebf0431baa8.tar.bz2
scala-773f6a8df9ef95852918a706f3f19ebf0431baa8.zip
Merge pull request #2198 from retronym/ticket/7215
SI-7215 Fix transpose of an empty Array[Array[T]].
Diffstat (limited to 'src/library/scala/collection/mutable/ArrayOps.scala')
-rw-r--r--src/library/scala/collection/mutable/ArrayOps.scala23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/library/scala/collection/mutable/ArrayOps.scala b/src/library/scala/collection/mutable/ArrayOps.scala
index bb938a7aeb..25ba7e4ce6 100644
--- a/src/library/scala/collection/mutable/ArrayOps.scala
+++ b/src/library/scala/collection/mutable/ArrayOps.scala
@@ -76,18 +76,21 @@ trait ArrayOps[T] extends Any with ArrayLike[T, Array[T]] with CustomParalleliza
* @return An array obtained by replacing elements of this arrays with rows the represent.
*/
def transpose[U](implicit asArray: T => Array[U]): Array[Array[U]] = {
- def mkRowBuilder() = Array.newBuilder(ClassTag[U](arrayElementClass(elementClass)))
- val bs = asArray(head) map (_ => mkRowBuilder())
- for (xs <- this) {
- var i = 0
- for (x <- asArray(xs)) {
- bs(i) += x
- i += 1
+ val bb: Builder[Array[U], Array[Array[U]]] = Array.newBuilder(ClassTag[Array[U]](elementClass))
+ if (isEmpty) bb.result()
+ else {
+ def mkRowBuilder() = Array.newBuilder(ClassTag[U](arrayElementClass(elementClass)))
+ val bs = asArray(head) map (_ => mkRowBuilder())
+ for (xs <- this) {
+ var i = 0
+ for (x <- asArray(xs)) {
+ bs(i) += x
+ i += 1
+ }
}
+ for (b <- bs) bb += b.result()
+ bb.result()
}
- val bb: Builder[Array[U], Array[Array[U]]] = Array.newBuilder(ClassTag[Array[U]](elementClass))
- for (b <- bs) bb += b.result
- bb.result
}
def seq = thisCollection