summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-06-18 15:22:12 +0000
committerMartin Odersky <odersky@gmail.com>2009-06-18 15:22:12 +0000
commite6c140fecd361fdec9ad1d3c1579b8bbd3e9f007 (patch)
tree4ce37c932a6e5dff0237f4d2cbc1b2b0258bb41e /src/library
parent5d11bc473378d30483488889de7b8c381c1d66c7 (diff)
downloadscala-e6c140fecd361fdec9ad1d3c1579b8bbd3e9f007.tar.gz
scala-e6c140fecd361fdec9ad1d3c1579b8bbd3e9f007.tar.bz2
scala-e6c140fecd361fdec9ad1d3c1579b8bbd3e9f007.zip
(1) some changes to interactive compiler interf...
(1) some changes to interactive compiler interface. 2) added (symbol.hasTypeAt 3) Added flatten/transpose/unzip to TraversableClass
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/Tuple2.scala20
-rw-r--r--src/library/scala/collection/generic/TraversableClass.scala41
2 files changed, 55 insertions, 6 deletions
diff --git a/src/library/scala/Tuple2.scala b/src/library/scala/Tuple2.scala
index bcf30e58aa..7edea7db15 100644
--- a/src/library/scala/Tuple2.scala
+++ b/src/library/scala/Tuple2.scala
@@ -82,10 +82,22 @@ object Tuple2 {
/** Tuple2 is the canonical representation of a @see Product2
*
*/
-case class Tuple2[+T1, +T2](_1:T1,_2:T2)
- extends Product2[T1, T2]
-{
- override def toString() = "(" + _1 + "," + _2 + ")"
+case class Tuple2[+T1, +T2](_1:T1, _2:T2) extends Product2[T1, T2] {
+/*
+ def map[CC[X] <: Traversable[X], A1, A2, B](implicit fst: T1 => CC[A1], snd: T2 => Traversable[A2]) = (f: (A1, A2) => B) => {
+ val b = fst(_1).genericBuilder[B]
+ val it1 = _1.iterator
+ val it2 = _2.iterator
+ while (it1.hasNext && it2.hasNext)
+ b += f(it1.next, it2.next)
+ b.result
+ }
+*/
+ override def toString() = {
+ val sb = new StringBuilder
+ sb.append('(').append(_1).append(',').append(_2).append(')')
+ sb.toString
+ }
/** Swap the elements of the tuple */
def swap: Tuple2[T2,T1] = Tuple2(_2, _1)
diff --git a/src/library/scala/collection/generic/TraversableClass.scala b/src/library/scala/collection/generic/TraversableClass.scala
index c107bddd0d..04c61dc413 100644
--- a/src/library/scala/collection/generic/TraversableClass.scala
+++ b/src/library/scala/collection/generic/TraversableClass.scala
@@ -11,16 +11,53 @@
package scala.collection.generic
+import annotation.unchecked.uncheckedVariance
+
trait TraversableClass[+A, +CC[X] <: Traversable[X]] {
- /** The factory companion object that builds instances of class CC */
+ def foreach[U](f: A => U): Unit
+ def head: A
+ def isEmpty: Boolean
+ /** The factory companion object that builds instances of class CC */
def companion: Companion[CC]
- /** The builder that builds instances of CC[A] */
+ /** The builder that builds instances of CC[A] */
protected[this] def newBuilder: Builder[A, CC[A]] = companion.newBuilder[A]
/** The generic builder that builds instances of CC at arbitrary element types. */
def genericBuilder[B]: Builder[B, CC[B]] = companion.newBuilder[B]
+
+ def unzip[A1, A2](implicit toPair: A => (A1, A2)): (CC[A1], CC[A2]) = {
+ val b1 = genericBuilder[A1]
+ val b2 = genericBuilder[A2]
+ for (xy <- this) {
+ val (x, y) = toPair(xy)
+ b1 += x
+ b2 += y
+ }
+ (b1.result, b2.result)
+ }
+
+ def flatten[B](implicit toTraversable: A => Traversable[B]): CC[B] = {
+ val b = genericBuilder[B]
+ for (xs <- this)
+ b ++= toTraversable(xs)
+ b.result
+ }
+
+ def transpose[B](implicit toTraversable: A => Traversable[B]): CC[CC[B] @uncheckedVariance] = {
+ val bs: Array[Builder[B, CC[B]]] = head.map(_ => genericBuilder[B]).toArray
+ for (xs <- this) {
+ var i = 0
+ for (x <- toTraversable(xs)) {
+ bs(i) += x
+ i += 1
+ }
+ }
+ val bb = genericBuilder[CC[B]]
+ for (b <- bs) bb += b.result
+ bb.result
+ }
}