Introduces fold as a Flow transformation and generalizes Sink.fold to be Flow.fold + Sink.head

Conflicts:
	akka-stream/src/main/scala/akka/stream/impl/ActorMaterializerImpl.scala
	akka-stream/src/main/scala/akka/stream/impl/Stages.scala
	akka-stream/src/main/scala/akka/stream/scaladsl/Sink.scala
This commit is contained in:
Viktor Klang 2015-06-14 03:12:30 -04:00
parent 849875ad90
commit 36abbb4234
18 changed files with 204 additions and 209 deletions

View file

@ -61,7 +61,7 @@ private[akka] final case class DropWhile[T](p: T ⇒ Boolean, decider: Supervisi
taking = true
ctx.push(elem)
} else {
ctx.pull
ctx.pull()
}
override def decide(t: Throwable): Supervision.Directive = decider(t)
@ -74,7 +74,7 @@ private[akka] final object Collect {
final val NotApplied: Any Any = _ Collect.NotApplied
}
private[akka] final case class Collect[In, Out](decider: Supervision.Decider)(pf: PartialFunction[In, Out]) extends PushStage[In, Out] {
private[akka] final case class Collect[In, Out](pf: PartialFunction[In, Out], decider: Supervision.Decider) extends PushStage[In, Out] {
import Collect.NotApplied
@ -183,7 +183,7 @@ private[akka] final case class Scan[In, Out](zero: Out, f: (Out, In) ⇒ Out, de
* INTERNAL API
*/
private[akka] final case class Fold[In, Out](zero: Out, f: (Out, In) Out, decider: Supervision.Decider) extends PushPullStage[In, Out] {
private var aggregator = zero
private[this] var aggregator: Out = zero
override def onPush(elem: In, ctx: Context[Out]): SyncDirective = {
aggregator = f(aggregator, elem)