summaryrefslogtreecommitdiff
path: root/src/library/scala/runtime/Tuple2Zipped.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-08-29 10:15:40 -0700
committerPaul Phillips <paulp@improving.org>2012-08-29 15:13:50 -0700
commit30eac476d054c50408a860f1574dcf92c7378e4a (patch)
treeba4474d87da4817831135c5e53291db9cd7053ba /src/library/scala/runtime/Tuple2Zipped.scala
parentd3f879a6b0165310bb756b811ea3f97685533948 (diff)
downloadscala-30eac476d054c50408a860f1574dcf92c7378e4a.tar.gz
scala-30eac476d054c50408a860f1574dcf92c7378e4a.tar.bz2
scala-30eac476d054c50408a860f1574dcf92c7378e4a.zip
Two more value classes.
Tuple2Zipped and Tuple3Zipped.
Diffstat (limited to 'src/library/scala/runtime/Tuple2Zipped.scala')
-rw-r--r--src/library/scala/runtime/Tuple2Zipped.scala45
1 files changed, 22 insertions, 23 deletions
diff --git a/src/library/scala/runtime/Tuple2Zipped.scala b/src/library/scala/runtime/Tuple2Zipped.scala
index dce7eef08d..182fd77133 100644
--- a/src/library/scala/runtime/Tuple2Zipped.scala
+++ b/src/library/scala/runtime/Tuple2Zipped.scala
@@ -16,7 +16,7 @@ import language.{ higherKinds, implicitConversions }
* by the requirement to resolve type constructors, for implicit search (which only
* needs to find an implicit conversion to Traversable for our purposes.)
*/
-trait ZippedTraversable2[+El1, +El2] {
+trait ZippedTraversable2[+El1, +El2] extends Any {
def foreach[U](f: (El1, El2) => U): Unit
}
object ZippedTraversable2 {
@@ -27,16 +27,15 @@ object ZippedTraversable2 {
}
}
-class Tuple2Zipped[El1, Repr1, El2, Repr2](
- coll1: TraversableLike[El1, Repr1],
- coll2: IterableLike[El2, Repr2]
-) extends ZippedTraversable2[El1, El2] {
+final class Tuple2Zipped[El1, Repr1, El2, Repr2](val colls: (TraversableLike[El1, Repr1], IterableLike[El2, Repr2])) extends AnyVal with ZippedTraversable2[El1, El2] {
+ // This would be better as "private def coll1 = colls._1" but
+ // SI-6215 precludes private methods in value classes.
def map[B, To](f: (El1, El2) => B)(implicit cbf: CBF[Repr1, B, To]): To = {
- val b = cbf(coll1.repr)
- b.sizeHint(coll1)
- val elems2 = coll2.iterator
+ val b = cbf(colls._1.repr)
+ b.sizeHint(colls._1)
+ val elems2 = colls._2.iterator
- for (el1 <- coll1) {
+ for (el1 <- colls._1) {
if (elems2.hasNext)
b += f(el1, elems2.next)
else
@@ -47,10 +46,10 @@ class Tuple2Zipped[El1, Repr1, El2, Repr2](
}
def flatMap[B, To](f: (El1, El2) => TraversableOnce[B])(implicit cbf: CBF[Repr1, B, To]): To = {
- val b = cbf(coll1.repr)
- val elems2 = coll2.iterator
+ val b = cbf(colls._1.repr)
+ val elems2 = colls._2.iterator
- for (el1 <- coll1) {
+ for (el1 <- colls._1) {
if (elems2.hasNext)
b ++= f(el1, elems2.next)
else
@@ -61,11 +60,11 @@ class Tuple2Zipped[El1, Repr1, El2, Repr2](
}
def filter[To1, To2](f: (El1, El2) => Boolean)(implicit cbf1: CBF[Repr1, El1, To1], cbf2: CBF[Repr2, El2, To2]): (To1, To2) = {
- val b1 = cbf1(coll1.repr)
- val b2 = cbf2(coll2.repr)
- val elems2 = coll2.iterator
+ val b1 = cbf1(colls._1.repr)
+ val b2 = cbf2(colls._2.repr)
+ val elems2 = colls._2.iterator
- for (el1 <- coll1) {
+ for (el1 <- colls._1) {
if (elems2.hasNext) {
val el2 = elems2.next
if (f(el1, el2)) {
@@ -80,9 +79,9 @@ class Tuple2Zipped[El1, Repr1, El2, Repr2](
}
def exists(f: (El1, El2) => Boolean): Boolean = {
- val elems2 = coll2.iterator
+ val elems2 = colls._2.iterator
- for (el1 <- coll1) {
+ for (el1 <- colls._1) {
if (elems2.hasNext) {
if (f(el1, elems2.next))
return true
@@ -96,9 +95,9 @@ class Tuple2Zipped[El1, Repr1, El2, Repr2](
!exists((x, y) => !f(x, y))
def foreach[U](f: (El1, El2) => U): Unit = {
- val elems2 = coll2.iterator
+ val elems2 = colls._2.iterator
- for (el1 <- coll1) {
+ for (el1 <- colls._1) {
if (elems2.hasNext)
f(el1, elems2.next)
else
@@ -108,7 +107,7 @@ class Tuple2Zipped[El1, Repr1, El2, Repr2](
}
object Tuple2Zipped {
- class Ops[T1, T2](x: (T1, T2)) {
+ final class Ops[T1, T2](val x: (T1, T2)) extends AnyVal {
def invert[El1, CC1[X] <: TraversableOnce[X], El2, CC2[X] <: TraversableOnce[X], That]
(implicit w1: T1 <:< CC1[El1],
w2: T2 <:< CC2[El2],
@@ -119,13 +118,13 @@ object Tuple2Zipped {
val it2 = x._2.toIterator
while (it1.hasNext && it2.hasNext)
buf += ((it1.next, it2.next))
-
+
buf.result
}
def zipped[El1, Repr1, El2, Repr2]
(implicit w1: T1 => TraversableLike[El1, Repr1],
w2: T2 => IterableLike[El2, Repr2]
- ): Tuple2Zipped[El1, Repr1, El2, Repr2] = new Tuple2Zipped(x._1, x._2)
+ ): Tuple2Zipped[El1, Repr1, El2, Repr2] = new Tuple2Zipped((x._1, x._2))
}
}