summaryrefslogtreecommitdiff
path: root/test/files/pos/t5862.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-06-08 11:30:02 +0200
committerAdriaan Moors <adriaan.moors@epfl.ch>2012-06-08 16:43:11 +0200
commit1dd02bdd72707e0f39bd1d8e381908b25ff7c5d7 (patch)
tree163121d8139a1710e39d182e22089a697546ffb7 /test/files/pos/t5862.scala
parentabc1c0be79ac2fb2b0e75c87a489570a9c71aa6e (diff)
downloadscala-1dd02bdd72707e0f39bd1d8e381908b25ff7c5d7.tar.gz
scala-1dd02bdd72707e0f39bd1d8e381908b25ff7c5d7.tar.bz2
scala-1dd02bdd72707e0f39bd1d8e381908b25ff7c5d7.zip
Reduce time spent in lubs
Reduce time spent in lubs by making depth more adaptive. It now takes into account separately the depth of the lub types and the maximal depth of theior base type sequences. It cuts depth more aggressively if it is the base types instead of the types themselves that grow deep. The old truncation behavior is retained under option -Xfull-lubs Another change is that we now track depth more precisely, which should also help or at least allow better statistics. Also added statistics that measure #lubs and time spent in them.
Diffstat (limited to 'test/files/pos/t5862.scala')
-rw-r--r--test/files/pos/t5862.scala38
1 files changed, 38 insertions, 0 deletions
diff --git a/test/files/pos/t5862.scala b/test/files/pos/t5862.scala
new file mode 100644
index 0000000000..e3006ddc3f
--- /dev/null
+++ b/test/files/pos/t5862.scala
@@ -0,0 +1,38 @@
+package test
+
+import java.io.DataOutput
+import java.io.DataInput
+
+/** Interface for writing outputs from a DoFn. */
+trait Emitter[A] {
+ def emit(value: A): Unit
+}
+
+/** A wrapper for a 'map' function tagged for a specific output channel. */
+abstract class TaggedMapper[A, K, V]
+ (val tags: Set[Int])
+ (implicit val mA: Manifest[A], val wtA: WireFormat[A],
+ val mK: Manifest[K], val wtK: WireFormat[K], val ordK: Ordering[K],
+ val mV: Manifest[V], val wtV: WireFormat[V])
+ extends Serializable {
+}
+
+/** Type-class for sending types across the Hadoop wire. */
+trait WireFormat[A]
+
+class MapReduceJob {
+ trait DataSource
+
+ import scala.collection.mutable.{ Set => MSet, Map => MMap }
+ private val mappers: MMap[DataSource, MSet[TaggedMapper[_, _, _]]] = MMap.empty
+
+ def addTaggedMapper[A, K, V](input: DataSource, m: TaggedMapper[A, K, V]): Unit = {
+ if (!mappers.contains(input))
+ mappers += (input -> MSet(m))
+ else
+ mappers(input) += m // : Unit
+
+ m.tags.foreach { tag =>
+ }
+ }
+}