protected override void HandleReadyComputation(Computation computation) { var syncComputation = (SynchronizationComputation <TLeft, TRight>)computation; var left = syncComputation.Input; var right = syncComputation.Opposite.Input; switch (syncComputation.SynchronizationContext.ChangePropagation) { case ChangePropagationMode.None: if (guard.Evaluate(left, right)) { parent.CreateLeftToRightSynchronization(syncComputation); } break; case ChangePropagationMode.OneWay: case ChangePropagationMode.TwoWay: var tracker = guard.Observe(left, right); tracker.Successors.SetDummy(); syncComputation.Dependencies.Add(new GuardedSynchronization <TLeft, TRight>(syncComputation, parent.CreateLeftToRightSynchronization, tracker)); break; default: break; } }
protected override void HandleReadyComputation(Computation computation) { parent.CreateLeftToRightSynchronization(false, (SynchronizationComputation <TLeft, TRight>)computation); }