trait Evolution[-I, LO, RO, +O, +E] extends stages.Evolution[I, O, E]
The continuation of a BaseBinaryOperator: a pair of sub-evolutions that evolve and dispose together.
Concrete operators implement apply alone — the reassembly of the two continuations into the operator's own
shape — and inherit the two halves of the shared contract:
evolveselects both continuations on the same status, the right one first, and hands them toapply;disposereleases both throughh8io.stages.Evolution.dispose, right first, so that a failure of one still leaves the other released and is reported as suppressed.
- I
the shared input type (contravariant)
- LO
the left output type (invariant: consumed and produced by the sub-evolution)
- RO
the right output type (invariant, likewise)
- O
the combined output type (covariant)
- E
the shared error type (covariant)
- Alphabetic
- By Inheritance
- Evolution
- Evolution
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Abstract Value Members
-
abstract
def
apply[_I <: I, _E >: E](leftStage: Stage[_I, LO, _E], rightStage: Stage[_I, RO, _E]): Stage[_I, O, _E]
Rebuilds the operator from the two continuations — normally the operator's own constructor.
Rebuilds the operator from the two continuations — normally the operator's own constructor.
- leftStage
the stage the left sub-evolution selected
- rightStage
the stage the right sub-evolution selected
- Attributes
- protected
-
abstract
def
left: stages.Evolution[I, LO, E]
The continuation of the left sub-stage.
-
abstract
def
right: stages.Evolution[I, RO, E]
The continuation of the right sub-stage.
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native() @IntrinsicCandidate()
-
final
def
compose[_O, _E >: E](that: stages.Evolution[O, _O, _E]): stages.Evolution[I, _O, _E]
Composes this evolution with the one downstream of it, so that for every status
-
def
dispose(): Unit
Releases everything held by the Stage that produced this evolution.
Releases everything held by the Stage that produced this evolution. That stage is permanently unusable afterwards — neither applied nor skipped again — and this is the only place its resources are released.
Whoever terminates a pipeline is responsible for disposing the evolution of the final Yield, so that the continuation is released at once instead of being carried around. The reference terminal driver is the
executeextension method ofh8io.stages.basein the lib module.dispose()stays valid after evolve has been called on the same instance, and must then release everything still alive, including whatever building the continuation acquired.evolvehands over no ownership: this evolution remains the cleanup point for its lineage until the continuation has run and produced an evolution of its own, which takes the role over from that moment.Exceptions are not part of this contract: a stage whose
applythrows produces no yield and therefore no evolution, so there is nothing to dispose — it must clean up after itself (see the Lifecycle section in Stage).A no-op is a fine implementation for a stage holding nothing external.
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
evolve(status: Status[_]): Stage[I, O, E]
The next stage, for the given status.
The next stage, for the given status.
May release what belongs to this generation alone — anything the returned stage and its own evolution will not reuse.
evolveand dispose are not mutually exclusive. Usually only one of them is called on an instance: a terminal driver disposes, a continuing pipeline evolves and drops the previous evolution. But a caller may do both, and operators owning their inner stage (Loop,Repeatand the rest ofh8io.stages.cyclesin the lib module) do exactly that — they evolve eagerly and keep the innerdisposeas the cleanup handle of the generation they just built. -
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
map[_I, _O, _E](f: (Stage[I, O, E]) ⇒ Stage[_I, _O, _E]): stages.Evolution[_I, _O, _E]
Applies
fto every stage this evolution would return, leaving disposal delegated to it unchanged.Applies
fto every stage this evolution would return, leaving disposal delegated to it unchanged.The way an operator keeps its wrapping in place across generations: the continuation comes back wrapped the same way the current stage is.
- Definition Classes
- Evolution
- Annotations
- @inline()
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
Deprecated Value Members
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] ) @Deprecated
- Deprecated